UIViewControllerサブクラスでは、次のメソッドがあります。UIViewController:viewWillAppearが呼び出され、viewDidAppearは呼び出されません。
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// do something
myTextField.text = @"Default";
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// do something
[myTextField selectAll:self];
[myTextField becomeFirstResponder];
}
- (void)viewDidLoad {
[super viewDidLoad];
// do something
myTextField.delegate = self;
}
NIBはInterface Builderを使用して作成されています。対応するビューコントローラオブジェクトは、pushViewControllerを通じてナビゲーションコントローラによってプッシュされます。
意図的な振る舞いは、テキストフィールドにデフォルトのテキストエントリを表示し、テキスト全体を選択し、テキストフィールドを最初のレスポンダとして設定することです。 [編集:最初のレスポンダーを作るすべてのとを選択することは、選択が消えてしまうので意味がありません。それでも、メソッドが次のように動作する理由はわかりません。]
ただし、viewDidLoadおよびviewWillAppearメソッドが呼び出されている間はメソッドviewDidAppearは呼び出されません。なぜ誰に教えてもらえますか?ウェブ上で見つけたほとんどの質問は、viewWillAppear/viewDidAppearの両方で処理されています。私はまた、サブビューやプログラムで作成されたビューでは、これらのメソッドは呼び出されないことを理解しました。これは適用されませんし、なぜ私はこれらの "ライフサイクル"メソッドの1つが誘発され、もう1つは誘発されないのだろうかと思います。
いいですか?ありがとう!
メモリの問題はありません。少なくともdidReceiveMemoryWarningは呼び出されません。きれいなすべての目標は助けになりませんでした。だから私はあなたの助言に従って、私は段階的に新しいプロジェクトにクラスをコピーしました。そして、それは動作します。 : - /私は元のクラスでオーバーライドするすべてのメソッドを追加しました。どちらの場合も、ビューはnavControllerのpushViewControllerによって表示されます。違いだけ:テストプロジェクトには1つのnavcontrollerがあり、私のプロジェクトには3つあります(rootcontrollerはtabbarcontroller) –
@sven - ナビゲーションバーのタイトルビューを変更したいと思います。 viewWillAppearがトリガされると、ビューがナビゲーションバーにまだプッシュされていないようです。 – OmniBus