2

iOS アプリのさまざまな UI 設定用のモーダル ビュー コントローラーを紹介します。これらの設定の 1 つを使用すると、ユーザーは別のメイン ビューを選択できます。「完了」を押したら、モーダル ビューを閉じて、新しく選択したビュー コントローラーを表示させたいと思います。古いビュー コントローラーが新しいビュー コントローラーに移行する瞬間的な遅延はありません。これはどのように実装できますか?

アップデート:

これは、Eugene の手法を使用して実装に成功したメソッドですが、アプリ デリゲートはありません。代わりに、この実装は、ナビゲーション スタック内のビュー コントローラーがユーティリティ アプリ内のモーダル ビュー コントローラーを提示するシナリオに固有のものです。

- (void)swapFrontSideViewController;
{
    UINavigationController *navigationVC = (UINavigationController *)[self presentingViewController];
    NSMutableArray *viewControllers      = [NSMutableArray arrayWithArray:navigationVC.viewControllers];
    UIViewControllerSubclass *selectedViewController = nil;
    if ([self.selectedFrontSide isEqualToString:FRONT_SIDE_NAME1]) {
        selectedViewController = [self.storyboard instantiateViewControllerWithIdentifier:FRONT_SIDE_NAME1];
    } else if ([self.selectedFrontSide isEqualToString:FRONT_SIDE_NAME2]) {
        selectedViewController = [self.storyboard instantiateViewControllerWithIdentifier:FRONT_SIDE_NAME2];
    }
    if (selectedViewController) {
        [viewControllers replaceObjectAtIndex:viewControllers.count -1 withObject:selectedViewController];
        [navigationVC setViewControllers:viewControllers];
        self.delegate = selectedViewController;
    } else {
        NSLog(@"Error: Undefined Front Side Selected.");
    }
}
4

1 に答える 1

3
- (IBAction)doDismiss:(id)sender {
  AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; // Get the app delegate
  NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:appDelegate.navigationController.viewControllers]; // fetch its navigationController viewControllers stack
  UIViewController *replacementController; //initialize replacement controller
  [viewControllers replaceObjectAtIndex:viewControllers.count -1 withObject:replacementController]; // replace the top view controller in stack with the replacement one
  [appDelegate.navigationController setViewControllers:viewControllers]; //change the stack
  [self dismissModalViewControllerAnimated:YES];
}
于 2012-06-27T13:08:36.813 に答える