2

私はナビゲーションコントローラーを持っており、その中にビューコントローラーがあります:

-NavigationController1
--MyViewController

また、別のナビゲーション コントローラー、NavigationController2 もあります。NavigationController2 にプッシュされた別のビュー コントローラー (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];
}

問題は、NavigationController2 にプッシュされた ViewController2 から MyViewController を呼び出し、その後独自の NavigationController1 から MyViewController を呼び出すと、ナビゲーション バーのタイトルと完了ボタンが追加されないことです。ただし、MyViewController の viewWillAppear および textFieldDidBeginEditing メソッドが呼び出されています。

何が問題で、どうすれば修正できますか?

ありがとう。

4

2 に答える 2

1

あなたの質問は少し紛らわしいです。

ビューコントローラ間の通信に問題があるとおっしゃっていると思います。

この場合、本当の問題は、ViewControllerが相互に通信してはならないということです。代わりに、モデルに状態を保存する必要があります。

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

私があなたの問題を誤解した場合は、私に知らせてください。

于 2009-06-06T01:13:15.987 に答える
0

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

self.navigationItem.title=@"the title";
于 2011-09-12T22:37:33.703 に答える