15

ビューとコントローラーをそのように設定しています。

  1. タブ/バーコントローラー
  2. 1.内にルートビューコントローラがあります
  3. 2.内には、プログラムで作成されたナビゲーションコントローラがあり、ルートビューコントローラにサブビューとして表示されます。

私がやろうとしているのは、トップタブバー/ナビゲーションコントローラーにアクセスして、ビューをプッシュできるようにすることです。

parentViewControllerを試しましたが、プログラムされたnavコントローラーにビューをプッシュするだけでした。

助言がありますか?

これは、ルートビューコントローラを設定する方法です。

  -(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];
}
4

3 に答える 3

31

ネストされたViewController(つまり、実際にはNavControllerスタック上にあるViewControllerによって制御されるビュー内)は、その親のビューのコントローラーがスタックメンバーであるUINavigationControllerに直接アクセスできません。それは一文の非常に重要なことですが、その意味は次のとおりです。ここからそこに到達することはできません。

代わりに、アプリデリゲートを介してアプリのNavControllerにアクセスする必要があります。

YourAppDelegate *del = (YourAppDelegate *)[UIApplication sharedApplication].delegate;
[del.navigationController pushViewController:nextViewController animated:YES];

UIApplicationのシングルトン(アプリに関するあらゆる種類の適切な情報が含まれています)を使用しています。このシングルトンには、AppDelegateを指す.delegateプロパティがあり、NavigationControllerへの参照が含まれています。

とにかく、これは「ナビゲーションベースのアプリケーション」XcodeテンプレートがNavControllerの所有権を設定する方法です。YMMVを自分でロールした場合は、ロールした場合でも、おそらくこの質問をする必要はありません。

于 2010-06-29T20:30:13.730 に答える
10

次の命令を使用できます。

[(UINavigationController *)self.view.window.rootViewController pushViewController:vc animated:YES];

それは私のために働く:D

于 2014-07-11T06:11:04.460 に答える
0

UIViewControllerのnavigationControllerプロパティとtabBarControllerプロパティを見てください。これらは、指定されたUIViewControllerが'属する'対応するnavigationControllerまたはtabBarControllerを返します。

したがって、次のようなことができます。

[customController.navigationController pushViewController:newController animated:YES];
// Similarly for tabBarController ...
于 2010-06-29T15:31:57.957 に答える