IBAction 未从子视图按钮单击调用

IBAction not getting called from Subviews button click

所以我整个晚上都在尝试解决我的问题,即单击位于 UIViewController 中的按钮不会触发 IBAction。

我的情况

我正在使用故事板构建我的应用程序,我的主要 ViewController 是 TabBarViewController。所述 TabBarViewController 的一项是,我们称它为 MainViewController.

MainViewController 后面有 BackgroundViewController,其中仅包含相机预览。

BackgroundViewControllerMainViewController里面添加如下:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
BackgrondViewController *bckgController = (BackgrondViewController *)[storyboard instantiateViewControllerWithIdentifier:@"background"];

[self.view addSubview:bckgController.view];
[self.view sendSubviewToBack:bckgController.view];

到目前为止一切正常,我提到它是因为它可能是相关的。

顶级控制器

现在我想在 MainViewController 中再添加一个 ViewController,这次在最上面。我们将顶视图控制器称为 TopViewController.

所以首先我像这样实例化它:

TopViewController *topController = (TopViewController *)[storyboard instantiateViewControllerWithIdentifier:@"top"];
topController.view.backgroundColor = [UIColor clearColor];

我添加了 clearColor,因为我的应用程序需要它,它 确认 这不会改变任何东西(相信我,我试过了)。

好的,现在我添加新创建的视图如下(我们还在里面MainViewController

 [self.view addSubview:topController.view];
 [self.view bringSubviewToFront:topController.view];

事实上,它确实显示透明视图,中间只有一个按钮。

问题

无论我怎么尝试,我都无法让按钮调用它的 IBAction 方法。

已知事实和我的尝试

请帮我摆脱困境。谢谢!

您是使用实例变量保留 topController 还是 属性?

一个简单的方法是在 MainViewController.h 文件中创建一个 属性。

@interface MainViewController : UIViewController
    @property (nonatomic, strong) TopViewController *topViewController;
@end

或者在 MainViewController.m 文件的顶部

@interface MainViewController ()
    @property (nonatomic, strong) TopViewController *topViewController;
@end

然后在创建后随时设置 属性。

self.topViewController = topController;

说明

-[UIView addSubview:] 保留视图,但不保留视图控制器。如果不保留视图控制器,那么 ARC 将在函数结束时释放视图控制器。您可以通过覆盖 -[TopViewController dealloc] 来验证这一点。当您按下按钮时,它会尝试向 nil 视图控制器发送消息。