故事板的IBAction子视图

时间:2013-05-14 02:45:23

标签: objective-c

我正在尝试使用故事板添加子视图。它正确显示,但子视图中没有按钮(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. 
}

2 个答案:

答案 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