2012-02-19 17 views
1

AppDelegateからUIViewControllerのUI要素を設定する必要があります。ストーリーボードを使用するので、UIViewControllerはAppDelegateで初期化されません。ストーリーボードからUIViewControllerをインスタンス化するときにAppDelegateからUIを変更できない

私はとのUIViewControllerのインスタンスを取得しよう:

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

しかし、私はここのように、UINavigationBarのUIBarButtonItemのようないくつかのUI要素を設定しようとすると:

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

UINavigationBar滞在空白とUIBarButtonItemが表示されません...

UIを変更するにはどうすればよいですか?

答えて

5

残念ながら、私が知る限り、Storyboardsをアプリケーションデリゲートに接続する方法はありません。したがって、アプリケーションのデリゲートライフサイクルメソッドでView Controllerのハンドルを直接取得して追加作業を行うことはできません。

ただし、アプリケーションデリゲートのウィンドウのrootViewControllerプロパティは、ストーリーボードで指定した初期ビューコントローラになります。それは実際に新しいビューコントローラをインスタンス化しているため、

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

また、動作しませんでしたあなたのストーリーボード上の-instantiateViewControllerWithIdentifier:を呼び出した理由がよく、次のとおりです。だから、常にこのような何かを行うことができます。ただし、ストーリーボードファイルで設定したビューコントローラの階層は、アプリの起動時に実際にアーカイブされていないものです。つまり、ビューコントローラを効果的にインスタンス化して、それにいくつかの変更を加えた後、割り当てを解除しています。

+0

ありがとう!ありがとうございます! Thantの解決策:3 – Lindemann

+0

私は今、問題が何であるか知っていることを知った、同様の質問:http://stackoverflow.com/questions/8784143/accessing-a-view-controller-created-through-storyboard-using- the-app-delegate – Lindemann

関連する問題