我正在尝试使用故事板添加子视图。它正确显示,但子视图中没有按钮(IBAction
)正常工作,即使是空代码,点击时应用也会崩溃。
TableViewController.m
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Load SubView
SubviewViewController *subview = [self.storyboard instantiateViewControllerWithIdentifier:@"SubviewViewController"];
[self.view addSubview:subview.view];
}
...
SubviewViewController.m
- (IBAction)btnCloseSubview:(id)sender
{
// Crashes the app when clicked, even empty as it's.
}
答案 0 :(得分:5)
您不应该只是将另一个视图控制器的视图添加到您的视图中,它可能会让您遇到麻烦。当我尝试过时,它有时会起作用,有时却不起作用。正确的方法是将控制器添加为TableViewController的子视图控制器:
SubviewViewController *subview = [self.storyboard instantiateViewControllerWithIdentifier:@"SubviewViewController"];
[self addChildViewController: subview];
[subview didMoveToParentViewController:self];
[self.view addSubview:subview.view];
您可能还需要设置子视图的视图框架(如果您希望它的大小相同,则为subview.view.frame = self.view.bounds)。
作为替代方案,您可以在xib文件中创建视图,而不是视图控制器,并将其添加为视图的子视图。在这种情况下,您可以将文件的xib所有者设置为TableViewController,并将该按钮的方法放在TableViewController中。
答案 1 :(得分:2)
查看UIContainerView,它处理子视图控制器。您将需要在父视图控制器和子视图控制器之间处理您自己的通信,但除此之外,只要您的子视图具有在其中设置的正确插座和操作,它将像您需要它一样用于子视图。故事板与它的视图控制器。
在容器视图上查看更多in-depth information。