ビューとコントローラーをそのように設定しています。
私がやろうとしているのは、トップタブバー/ナビゲーションコントローラーにアクセスして、ビューをプッシュできるようにすることです。
ParentViewControllerを試しましたが、プログラムされたナビゲーションコントローラーにビューをプッシュするだけでした。
助言がありますか?
これは私が私のルートビューコントローラーをセットアップする方法です:
-(void)viewDidAppear:(BOOL)animated{
NSLog(@"ROOT APPEARED");
[super viewDidAppear:animated];
WorklistViewController *worklistController = [[WorklistViewController alloc]initWithNibName:@"WorklistView" bundle:[NSBundle mainBundle]];
UINavigationController *worklistNavController = [[UINavigationController alloc] initWithRootViewController:worklistController];
worklistNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
worklistNavController.view.frame = watchlistView.frame;
[worklistNavController.topViewController viewDidLoad];
[worklistNavController.topViewController viewWillAppear:YES];
[self.view addSubview:worklistNavController.view];
GetAlertRequestViewController *alertsController = [[GetAlertRequestViewController alloc]initWithNibName:@"AlertsView" bundle:[NSBundle mainBundle]];
UINavigationController *alertsNavController = [[UINavigationController alloc] initWithRootViewController:alertsController];
alertsNavController.navigationBar.barStyle = UIBarStyleBlackOpaque;
alertsNavController.view.frame = alertsView.frame;
[alertsNavController.topViewController viewDidLoad];
[alertsNavController.topViewController viewWillAppear:YES];
[self.view addSubview:alertsNavController.view];
}
ネストされたViewController(つまり、実際にはNavControllerスタック上にあるViewControllerによって制御されるビュー内)は、その親のビューのコントローラーがスタックメンバーであるUINavigationControllerに直接アクセスできません。それは一文の口の中にありますが、その意味は次のとおりです。ここからそこにたどり着くことはできません。
代わりに、アプリデリゲートを介してアプリのNavControllerにアクセスする必要があります。
YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];
UIApplicationのシングルトン(アプリに関するあらゆる種類の適切な情報が含まれています)を使用しています。このシングルトンには、AppDelegateを指す.delegateプロパティがあり、NavigationControllerへの参照が含まれています。
とにかく、これが「ナビゲーションベースのアプリケーション」XcodeテンプレートがNavControllerの所有権を設定する方法です。 YMMVを自分でロールした場合は、ロールした場合でも、おそらくこの質問をする必要はありません。
次の命令を使用できます。
[(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];
それは私のために働きます:D
UIViewControllerのnavigationControllerプロパティとtabBarControllerプロパティを確認してください。これらは、指定されたUIViewControllerが '属する'対応するnavigationControllerまたはtabBarControllerを返します。
したがって、次のようなことができます。
[customController.navigationController pushViewController:newController animated:YES];
// Similarly for tabBarController ...