2013-05-14 95 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