2012-02-19 76 views
1

我需要從AppDelegate中設置UIViewController的一些UI元素。我使用Storyboard,所以UIViewController不會在AppDelegate中初始化。從Storyboard實例化UIViewController時無法從AppDelegate更改UI

我試圖讓UIViewController中的實例與:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]]; 
TableViewController* myTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"myTableViewController"]; 

但是,當我嘗試設置一些UI元素,如UINavigationBar的的的UIBarButtonItem,喜歡這裏:

UIBarButtonItem* refreshButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshEntry)]; 
    myTableViewController.navigationItem.rightBarButtonItem = refreshButton; 

的UINavigationBar的住宿空白和UIBarButtonItem不會出現...

如何更改UI?

回答

5

不幸的是,據我所知,故事板無法插入應用程序委託。因此,您無法直接在應用程序委託生命週期方法中獲取視圖控制器的句柄以執行一些額外的工作。

但是,您知道應用程序代理的窗口'rootViewController屬性將是您在Storyboard中指定的初始視圖控制器。所以,你總是可以做這樣的事情:

XXRootViewController *rootViewController = (XXRootViewController *)self.window.rootViewController; 
[rootViewController doAdditionalWork]; 

另外,爲什麼叫你的故事板-instantiateViewControllerWithIdentifier:沒有工作的原因是,好,因爲它實際上是實例化一個新的視圖控制器。但是,您在Storyboard文件中設置的視圖控制器層次結構是您的應用啓動時實際上未被存檔的內容。所以你有效地實例化視圖控制器,對它進行一些更改,然後它被釋放。

+0

好的......謝謝! Thant的解決方案:3 – Lindemann 2012-02-20 01:02:42

+0

我現在發現,我知道問題是什麼,一個類似的問題:http://stackoverflow.com/questions/8784143/accessing-a-view-controller-created-through-storyboard-using-在應用程序內,委託 – Lindemann 2012-02-20 01:05:23