在ModalViews之间切换

时间:2009-09-11 07:55:38

标签: iphone objective-c cocoa-touch xcode model-view-controller

方案:
1.显示基于导航控制器的视图
2.用户选择选项
3.显示模态视图A
4.用户在模态视图A中选择另一个选项 5.隐藏模态视图A
6.显示模态视图B

// This function must show modal view A
This scenario implemented like this:
- (IBAction)showModalViewA:(id)sender {
    ModalViewA *viewA = [[ModalViewA alloc] forParent:self];
    [self presentModalViewController:viewA animated:YES];
    [viewA release];
}

// This function must hide modal view A and show modal view B
- (void)didSelectOptionInViewA {
    ModalViewB *viewB = [[ModalViewB alloc] init];
    viewB.peoplePickerDelegate = self;

    [self dismissModalViewControllerAnimated:NO];            // Problem Is Here
    [self presentModalViewController:viewB animated:YES];
    [viewB release];
}

请查看标记为 //问题在这里的行 当我设置 dismissModalViewControllerAnimated:NO 时,它可以正常工作。 如果此参数为 YES ,则屏幕上不会显示viewB。

如何让它适用于动画?

1 个答案:

答案 0 :(得分:0)

动画需要一些时间,比如0.3秒。您无法看到动画何时结束(没有发送任何委托方法),因此您可以执行以下两项操作:

  1. 在新方法中显示新的模态视图控制器,并以0.3秒的延迟调用该方法。这不是一个理想的解决方案,因为动画时间可能会有所不同,你永远无法确定动画是否已经完成。
  2. 将某种标志实例变量添加到主视图控制器(呈现模态视图控制器的那个)并将该标志设置为YES(或者使用位来执行,然后一个标志可以包含多个选项)。然后检入 - [UIViewController viewDidAppear:]是否设置了该标志,当它是时,显示模态视图控制器。
    1. 您可以确定动画已完成。
    2. 呈现模态视图控制器应该在它的主视图控制器
    3. 中完成
  3. 我真的很想知道你为什么要做这样的事情,因为这真的不是Apple-ish。您最好在旧的模态视图上显示新的模态视图,或者尝试找到另一种能够更好地解决问题的设计模式,这样会更好。