【问题标题】:Switching between ModalViews在模态视图之间切换
【发布时间】:2009-09-11 07:55:38
【问题描述】:

场景:
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 不会出现在屏幕上。

如何让它与动画一起使用?

【问题讨论】:

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


    【解决方案1】:

    动画需要一些时间,比如 0.3 秒。您看不到动画何时完成(没有发送委托方法),因此您可以做两件事:

    1. 在新方法中显示新的模态视图控制器,并以 0.3 秒的延迟调用该方法。这不是一个理想的解决方案,因为动画时间可能会有所不同,而且您永远无法确定动画是否真的完成了。
    2. 将某种标志实例变量添加到您的主视图控制器(呈现模态视图控制器的那个)并将该标志设置为“是”(或使用位执行此操作,然后一个标志可以包含多个选项)。然后检查 -[UIViewController viewDidAppear:] 是否设置了该标志,如果设置了,则显示模态视图控制器。
      1. 您可以确定动画已经完成。
      2. 应在其主视图控制器中呈现模态视图控制器

    我真的很想知道你为什么要做这样的事情,因为这真的不是很苹果式的。您最好将新的模态视图呈现在旧的模态视图之上,或者您尝试找到另一种能够正确解决问题的设计模式,这样会更好。

    【讨论】:

    • 当图像选择器返回并且我需要对给定图像执行一些操作时,我正在执行此操作。我不想在选择器完全关闭之前开始操作,所以我提前设置了一个标志并在-viewDidAppear: 中检查它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多