2012-07-08 85 views
1

(在故事板設計,下面的截圖),我有我的RootViewController的的觀點如何以編程方式爲故事板中的子視圖設置視圖控制器?

enter image description here

兩個子視圖在我的代碼要分配單獨視圖控制器到每個子視圖。即將一個tableViewController分配給TableView。

我試圖在awakeFromNib(或ViewDidLoad)方法中做到這一點,但無濟於事。我的tableview控制器中的委託方法永遠不會被調用。我認爲即使在我分配的tableviewcontroller可以執行某些操作之前,故事板也可以在這裏加載子視圖。

self.myTableViewController = (TodoListViewController *)[[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 
self.myTableView.delegate = self.myTableViewController; 
self.myTableView.dataSource = self.myTableViewController; 
self.myTableViewController.tableView = self.myTableView; 

我不確定在故事板中有這樣的意見時是否允許這樣做,或者我做錯了什麼?

回答

0

再試一次你的viewDidLoad方法,這是最簡單的答案。如果方法沒有加載,你可能需要查看你內部的其他方法,因爲如果應用程序很大,因爲他們經常使用故事板,你可能會有衝突的方法。

我也想看看這個: http://blog.waynehartman.com/archive/2012/01/07/uistoryboard-on-ios-5-the-good-the-bad-and-the.aspx

它顯示了最常見的事故人使用任何故事板功能編程

希望幫助時,使!

+0

好點,但該應用程序目前非常簡單,並沒有很多代碼重疊,因爲您已經指出。因此在ViewDidLoad中再次嘗試目前沒有太多幫助。 – dotnetcoder 2012-07-09 17:01:29

-1

在故事板中設置課程和代表(通常包括this one在內的衆多教材中顯示)通常最容易。

如果你真的想把滾動視圖和表格視圖放到同一視圖中,那麼你需要看看UIViewController instantiateViewControllerWithIdentifier:,你可以合理地輕鬆地拉多個視圖控制器(理想情況下,他們有適當的類,委託和在故事板中設置的來源)並將其視圖添加到外部包裝視圖。我會說我已經完成了這個任務,並且可以很輕鬆地完成很酷的任務,但通常不是最簡單的方法。

+0

感謝您的評論。但是instantiateViewControllerWithIdentifier在這裏沒有幫助,因爲table view的viewcontroller不在故事板上。它不允許我將viewcontroller分配給子視圖,因爲我可以告訴(tableview是子視圖),因此也就是SO的問題。 – dotnetcoder 2012-07-09 21:10:54

+0

爲什麼不把它放在故事板上?故事板使佈線變得簡單。我來自一個爲了控制原因想要在代碼中做很多事情的歷史,所以我明白這是否是您的動機,但如果您打算使用故事板,則只需充分利用它即可。 – joshOfAllTrades 2012-07-09 21:18:54

+0

故事板允許喜歡viewcontroller子視圖?如果是的話,你可以請指出我的權利方向。根據我的經驗,它不允許爲子視圖設置視圖控制器。 – dotnetcoder 2012-07-09 21:20:57

0

聽起來像你想寫自己的自定義容器控制器,例如類似於UISplitViewController。這是蘋果關於在UIViewController class reference中這樣做的簡要文檔。例如,您可以在容器控制器的viewDidLoad:viewWillAppear:方法中以編程方式實例化子控制器。儘管如此,我認爲你不能讓IB爲你實例化孩子,就像你可以用標籤欄或導航控制器與孩子的關係一樣。 (如果有辦法,我想知道!)

1

我來到這個網站,因爲我有類似的問題。其實我正在做同樣的事情:我有一個有兩個子視圖的視圖控制器(全都在有很多約束的故事板中定義)。

在viewDidLoad中的containerviewcontroller

我做同樣的電話,你做(但我首先定義的視圖):

self.myTableViewController = (TodoListViewController *)[[UITableViewController alloc] initWithStyle:UITableViewStylePlain]; 
self.myTableViewController.tableView = self.myTableView; 
self.myTableView.delegate = self.myTableViewController; 
self.myTableView.dataSource = self.myTableViewController; 

這對我來說(我猜的作品,這裏是你的問題:你不要」沒有周圍的導航控制器....並確保你的tableview的插座真的連接在故事板上。)。

但真正的問題出現在正確的接線之後。如果你鍵入一個單元格,你可能想給一些cellID給nextView。正如你手工定義你的tableviewcontroller,只有你的委託方法didSelectRowAtIndexPath被調用,但不是prepareForSegue。

我已經打得四處從故事板

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"aStoryboard" bundle:nil]; 
self.myTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"myTableViewID"]; 

實例化視圖 - 控制,但SEGUE沒有被調用。直接調用它(performSegueWithIdentifier:...)不起作用,因爲這個tableviewcontroller不是由導航控制器管理的。

對於我來說,prepareForSegue方法在containerViewController中被調用,它可以將調用委託給它的子視圖控制器。

編輯:其實真正的解決方案是不。有一個「容器視圖」對象,可以將其添加到視圖中,並定義可包含子視圖控制器的視圖控制器的區域。這是我真正想做的。

+0

+1爲「容器視圖」部分。正是我在找什麼。謝謝。 – Lukman 2012-12-31 03:27:45

相關問題