【发布时间】: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];
}
您是否知道一种方法可以使这成为可能(使第二个视图在第一个视图消失时出现),例如一些代码?
谢谢。
【问题讨论】:
标签: iphone asynchronous conflict modalviewcontroller dismiss