2013-05-14 96 views
2

我尝试添加使用故事板子视图。它正确显示,但子视图中没有任何按钮(IBAction)可正常工作,即使是空代码,应用程序总是在单击时崩溃。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. 
} 

回答

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中。

+0

感谢您的回答,我的代码现在工作正常!我想问问这个解决方案是完全正确的还是更好的方法。 – 2013-05-14 04:46:19

+0

@LucianoNascimento,这是在代码中添加子视图控制器的正确方法。你虽然没有说你想完成什么,但是这是否是达到目标的最好方法,我不知道。正如我所说的,您可以添加一个视图,或者您可以将SubviewViewController作为模式控制器呈现 - 这完全取决于您的目的。 – rdelmar 2013-05-14 04:54:46

+0

@Luciano Nascimento:如果您的问题已解决,我建议您通过选中对号接受答案。 – 2013-05-14 05:34:00

2

调查UIContainerView,它处理子视图控制器。您需要处理父母和子视图控制器之间的自己的通信,但除此之外,只要您的子视图具有正确的插口和操作故事板与视图控制器。

查看容器视图上的更多in-depth information

+0

+1为文档参考。它已经清除了我脑海中的所有模棱两可的问题 – 2013-06-04 06:53:29

+0

“您需要处理父母和子女视图控制器之间的自己的通信”。你能告诉我如何?我有以下问题... :(http://stackoverflow.com/questions/32361624/gesture-recognizer-and-ibaction-in-a-uiviewcontroller-child-embedded-in-anothe。谢谢你反正 – enagra 2015-09-02 19:38:10