HomeView と HomeDropDownView があります。
HomeDropDownView は、HomeView のドロップダウン ビューとして表示されます。
HomeView は HomeDropDownView のデリゲートです。
HomeDropDownView でアクションを実行するときに、HomeView でデリゲート メソッドを呼び出し、そのデリゲート メソッドに 3 番目のビュー コントローラーである TestViewController をナビゲーション コントローラーから提示させたいと考えています。
クラスのどこからでも TestViewController を起動しようとすると、デリゲート メソッドを除いて正常に動作します。
HomeDropDownView にはアニメーションがありますが、コンプリートにデリゲート メソッドの呼び出しを配置しても、View Controller は表示されません。そして、私がこれを使用している場合、アニメーションはとにかく起動しません。アニメーションなしのサイズ変更のみです。
TestViewController の init は viewDidLoad と同様に呼び出されますが、viewWillAppear は呼び出されず、ビューは表示されません。
コード:
ホームドロップダウンビュー
- (void)finalAction {
...
[self callDelegateAction];
...
- (void)calldelegateAction {
if ([self.delegate respondsToSelector:@selector(launchTestView)] ) {
[self.delegate launchTestView];
} else {
DLog(@"Error out to the user.");
}
}
ホームビュー
- (void)launchTestView {
//[self listSubviewsOfView:self.parentViewController.view];
NSLog(@"delegate method | self: %@", self);
TestViewController *tvc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
//[self.navigationController presentViewController:tvc animated:YES completion:nil];
//[self.view.window.rootViewController presentViewController:tvc animated:YES completion:nil];
//[self.navigationController pushViewController:tvc animated:YES];
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appdelegate.tabBarController.navigationController presentViewController:tvc animated:YES completion:^() {
NSLog(@"Done!");
}];
}
上記のアプローチはどれも機能しません。しかし、まったく同じコードを viewDidAppear に入れるか、ボタン アクション メソッドに入れると、問題なく動作します。デリゲート メソッドの自己を呼び出す時点で HomeView があり、nav コントローラーを含むすべてのサブビューがそこにあるように見えます。これは tabcontroller ベースのプロジェクトにありますが、上記のいずれも nav コントローラーを呼び出す方法として受け入れられると思います。
私は何が欠けていますか?デリゲート メソッドが HomeView の Nav コントローラーでビューコントローラーをプッシュ/提示したくないのはなぜですか? おそらく私が見逃しているものですが、Apple Docsやその他のスレッドで理由を見つけることができません. 助けてくれてありがとう!