iPhone - 平滑显示 2 个连续的模态视图控制器

Posted

技术标签:

【中文标题】iPhone - 平滑显示 2 个连续的模态视图控制器【英文标题】:iPhone - Display smoothly 2 successive modal view controller 【发布时间】:2011-01-25 16:24:26 【问题描述】:

我正在寻找一种方法,能够一个接一个地显示一个模态视图控制器,并在第一个消失时显示第二个。

问题在于,在第一个 modalviewcontroller 中完成的解除调用同时适用于两者,而 SecondController 从未显示。

在父调用之前或之后放置第一次关闭不会改变任何内容。 如果第一次关闭设置为 animate=NO,则一切正常。但我需要动画。

我计划这样做,但问题是在第一个 modalviewcontroller 中完成的解除调用适用于两者,并且从未显示 SecondController。

我不明白为什么,因为每个模态视图都有自己的导航控制器,所以它们不应该发生冲突。

我尝试了另一种方式,在 0.5 秒后使用 NSTimer 显示第二个模态视图,但这并不令人满意:当第一个完全消失时,第二个出现。一点都不流畅...如果我将延迟设置为小于 0.5 秒,则第二个模态视图永远不会出现。而且用这样的计时器来做这件事似乎不是一种好的编码方式。

Main.m

- (void) entry 

    FirstController *nextWindow = [[FirstController alloc] initWithNibName:@"theNIB" bundle:nil];

    nextWindow.caller = self;

    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:nextWindow];

    [self.navigationController presentModalViewController:navController animated:YES];

    [nextWindow release];
    [navController release];



- (void) thingsDoneInFirstModalController:(OBJECT)returnValue retval2:(OBJECT2)returnValue2 
    [self display2ndController];


- (void) display2ndController 

    SecondController *nextWindow;

    nextWindow = [[SecondController alloc] initWithNibName:@"NIB2" bundle:nil];

    UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:nextWindow];
    [self.navigationController presentModalViewController:navController animated:YES];
    [navController release];
    [nextWindow release];

第一个 ModalViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    [self.navigationController dismissModalViewControllerAnimated:YES];
    [self.caller thingsDoneInFirstModalController:theResult retval2:someMoreResult];

您是否知道一种方法可以使这成为可能(使第二个视图在第一个视图消失时出现),例如一些代码?

谢谢。

【问题讨论】:

【参考方案1】:

尝试创建一些虚拟的 ViewController,并使用它展示你的第二个。

【讨论】:

你能解释一下你的答案吗? 好吧,看来我错了,不可能同时预设/关闭 2 个视图控制器。这是我得到的 2011-01-26 17:38:55.380 test[4415:207] *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试从 而转换已经在进行中。等待 viewDidAppear/viewDidDisappear 知道当前转换已经完成' 这样您就可以使用简单的 UIView 动画来做到这一点,而无需模态视图控制器。它肯定会起作用

以上是关于iPhone - 平滑显示 2 个连续的模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

显示模态视图时使 iPhone 状态栏消失?

在 ipad 中模态显示视图并在 iphone 中推送

呈现模态视图控制器时 iPhone 崩溃

iPhone:模态视图控制器的代表

iphone - 将子视图添加到窗口后无法推送模态视图?

iOS - 目前的模态视图控制器会导致一些动画伪影(iPhone)