2012-02-19 45 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

相关问题