2009-06-05 13 views
2

私はナビゲーションコントローラとそのビューコントローラを持っている:UINavigationBarのタイトルと右ボタン

-NavigationController1 
--MyViewController 

をし、同様に私は別のナビゲーションコントローラを持っている - NavigationController2を。 NavController2にプッシュされた別のView Controller - ViewController2からMyViewControllerを呼び出したいとします。 -NavigationController2 --ViewController2

私は、次の方法でそれを実行します。

@implementation ModifyDicVController 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    self.navigationItem.rightBarButtonItem = [ [ [UIBarButtonItem alloc] 
        initWithBarButtonSystemItem: 
        UIBarButtonSystemItemAdd target:self 
        action:@selector(add_clicked)] autorelease]; 

} 


-(void) add_clicked 
{ 
    [navigationController pushViewController: addWordsVController animated: YES]; 
} 

@end 

そして、ここでは、MyViewController(と呼ばれているもの)のviewWillAppearメソッドです:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self setTitle: @"My title"]; 
} 

ユーザーがテキストフィールドの編集を開始すると、ナビゲーションバーに「完了」ボタンが追加されます。

- (void) textFieldDidBeginEditing: (UITextField *) textField 
{ 
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] 
       initWithTitle: NSLocalizedString(@"button: done", @"") 
       style:UIBarButtonItemStyleDone 
       target:self 
       action:@selector(doneEditing)] 
       autorelease]; 
} 

問題は:NavController2にプッシュされたViewController2からMyViewControllerを呼び出すと、NavigationController1からMyViewControllerを呼び出した後、ナビゲーションバーのタイトルと完了ボタンが追加されません。しかし、MyViewControllerのviewWillAppearメソッドとtextFieldDidBeginEditingメソッドが呼び出されています。

問題は何ですか?どのように修正できますか?

ありがとうございました。

+0

navコントローラの階層をより詳しく説明できますか? –

+0

アドレス帳に似たアプリケーションです。私は(私はいくつかの本を持っている)編集するアドレス帳を選択することができますまた、私はアクティブなアドレス帳に新しい連絡先を追加することができますからタブを選択することができますタブバーがあります。どちらのタブもナビゲーションコントローラです。 また、新しい連絡先をアドレス帳に追加するには、最初のタブに移動し、編集する特定のアドレス帳を選択し、そこから新しい連絡先を追加することもできます。 –

答えて

1

あなたの質問はちょっと混乱しています。

私はあなたがView Controller間の通信に問題があると言っていると思います。

実際の問題は、ビューコントローラが互いに通信してはならないことです。代わりに、状態をモデルに格納する必要があります。

これを行うと問題は発生しません。紛失している情報を保存するためのモデルシングルトンを検討してください。

問題が誤解されている場合は、お知らせください。

0

現在、スタックの最上位にあるビューコントローラ(アクティブ)のタイトルの使用を変更します。

[email protected]"the title"; 
関連する問題