0

我正在构建一个应用程序,我在其中执行此层次结构:

view1controller(调用presentmodalviewcontroller方法)-->view2controller(调用presentmodalviewcontroller方法)-->view3controller(调用presentmodalviewcontroller)--->view4controller

我知道我总是可以通过使用dismissmodalviewcontroller 方法从一个视图切换回另一个视图的概念。就像我可以从视图 4 切换到视图 3,从视图 3 切换到视图 2。我的问题是如何切换到随机视图控制器?喜欢从视图 4 到视图 2 还是从视图 3 到视图 1?..我没有使用导航控制器。我知道我错过了一个概念。任何人都可以阐明这个概念。

4

4 回答 4

1

来自参考指南UIViewController

如果您连续呈现多个视图控制器,从而构建一个呈现视图控制器的堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被关闭,这可能与堆栈中其他视图控制器使用的样式不同。

于 2012-05-25T09:29:47.157 回答
1
    AppDelegate *delegate_app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
ABC:;
    NSUInteger iRan = arc4random() % [delegate_app.viewcontrollerArray count];

    if ([(UIViewController *)[delegate_app.viewcontrollerArray objectAtIndex:iRan] isEqual:self]) 
    {
        NSLog(@"self so not taken");
        goto ABC;
    }

    [self presentModalViewController:(UIViewController *)[delegate_app.viewcontrollerArray objectAtIndex:iRan] animated:YES];    

viewcontrollerArray 在 AppDelegate 中与您拥有的所有视图控制器一起分配和合成。

于 2012-05-25T09:40:54.513 回答
0

我认为你应该一次只保留一个模态。关闭不带动画的那些你不想看到的。

第一个模态:

[view1controller presentViewController:view2controller animated:YES]

移至第二个模态:

[presentingViewController dismissModalViewControllerAnimated:NO]
[presentingViewController presentViewController:view3controller animated:YES]

移至第三模式:

[presentingViewController dismissModalViewControllerAnimated:NO]
[presentingViewController presentViewController:view4controller animated:YES]

回到第一个模态:

[presentingViewController dismissModalViewControllerAnimated:NO]
[presentingViewController presentViewController:view1controller animated:YES]

如果您确实需要多个嵌套的模态视图控制器,则必须以相反的顺序关闭它们,并且一次代表多个,有时只有最后一个被动画化。所以要从 1 到 4,您需要在没有动画的情况下呈现 2 和 3,然后呈现第 4 个动画。反之,用动画解雇 4 和不带动画的 3 & 2。在这种情况下,您最好使用导航控制器恕我直言(您不需要有可见的导航栏)。

有关更多信息,请参阅此问题

于 2012-05-25T10:02:41.527 回答
0

如果您想从第三视图转到第一视图或类似的视图,您可以尝试以下代码:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];
于 2012-05-25T09:41:48.943 回答