0

AppDelegate を主要な連絡先として使用する UINavigation コントローラーをセットアップしました。

presentHomeViewController、presentLoginViewControllerなど、さまざまなView ControllerをNavigation Controllerにプッシュするさまざまなメソッドがあります。

アプリデリゲート - didFinishLaunching

welcomeViewController = [[MyWelcomeViewController  alloc] initWithNibName:@"MyWelcomeViewController" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:welcomeViewController];
navController.navigationBarHidden = YES;

self.revealSideViewController = [[PPRevealSideViewController alloc] initWithRootViewController:navController];

[self.revealSideViewController setDirectionsToShowBounce:PPRevealSideDirectionNone];
[self.revealSideViewController setPanInteractionsWhenClosed:PPRevealSideInteractionContentView | PPRevealSideInteractionNavigationBar];

self.window.rootViewController = self.revealSideViewController;

これは正しいプロセスですか?

- (void)presentHomeViewController {
// We start by dismissing the ModalViewConrtoller which is LoginViewController from the welcomeview
[self.welcomeViewController dismissModalViewControllerAnimated:YES];

// Check if the home view controller already exists if not create one
if (!self.homeViewController) {
    NSLog(@"presentHomeViewController- Creating the Home View controller");
    homeViewController = [[MyHomeViewController alloc] initWithNibName:@"MyHomeViewController" bundle:nil];
}

// Push the homeViewController onto the navController
NSLog(@"presentHomeViewController");
self.navController.navigationBarHidden = NO;
[self.navController setTitle:@"Home"];
[self.navController pushViewController:homeViewController animated:NO];

次に、次を別のクラスに追加すると:

[self.navigationController pushViewController:accountViewController animated:NO];

ビューはスタックにプッシュされません。これまで行ってきたように AppDelegate 内のすべての動きを制御する必要がありますか、またはこれにアプローチするより良い方法はありますか?

4

1 に答える 1

0

編集

コードを投稿していただきありがとうございます。したがって、最初に最後の質問に答えるために、アプリ デリゲートからナビゲーション スタックを制御することはお勧めしません。ナビゲーション コントローラーの子であるビュー コントローラーからスタックを制御する必要があります。

UINavigationControllerここまではUIViewController、View Controller の階層を思い出してUIViewControllerください。さらに重要なことは、親ビュー コントローラー、それを提示したビュー コントローラー、およびそのナビゲーション コントローラーのプロパティもあるということです。したがって、階層を考慮して、アプリ デリゲートは、ナビゲーション コントローラーのルート VC とナビゲーション コントローラー自体のみをインスタンス化し、その後、ナビゲーション コントローラーのルート VC を設定する必要があります。

そこから、VC 自体から他の VC をプッシュおよびポップする必要があります。すべての VC には、その一部であるナビゲーション コントローラーを指すように自動的に設定されるプロパティがあることに注意してください。それが機能する理由[self.navigationController pushViewController:]です。たとえば、ルート VC が であるナビゲーション コントローラーがありUITableViewController、テーブル ビューの項目の 1 つをタップして新しい VC をスタックにプッシュした場合、ナビゲーション コントローラー クラスからではなく、テーブル VC からその VC をプッシュします。またはアプリデリゲート。

混乱している場合は申し訳ありません。説明が必要な場合はお知らせください。最善を尽くします。それ以外の場合は、うまくいけば、正しい軌道に乗ることができます。

于 2012-10-29T17:09:51.030 に答える