ModalViews之间切换(Switching between ModalViews)

2019-10-17 12:57发布

场景:
1.显示导航控制器基于图
2.用户选择选项
3.显示模式查看A
4.用户选择在模态视图甲另一种选择
5.隐藏模式视图甲
6.显示模态视图乙

// 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,它工作正常。 如果此参数为 ,则viewB没有出现在屏幕上。

如何使它可与动画?

Answer 1:

动画需要一定的时间,像0.3秒。 你看不到当动画结束(无委托方法被发送),所以你可以做两件事情:

  1. 出现新的模态视图控制器在一个新的方法,并调用具有0.3秒的延迟该方法。 这不是一个理想的解决方案,因为动画时间可能有所不同,你永远无法确定在动画真的完了。
  2. 某种标志实例变量添加到您的主视图控制器(其中介绍了模态视图控制器的一个),并设置该标志为YES(或使用位做到这一点,那么一个标志可以包含多个选项)。 然后检查 - [UIViewController中viewDidAppear:]是否该标志被设置,并且当它是,呈现模态视图控制器。
    1. 你可以肯定的动画结束。
    2. 呈现模态视图控制器应该把它的主视图控制器内完成

我真的不知道你为什么会想要做这样的事情,因为这实在是不怎么苹果十岁上下。 你最好在呈现老态视图的新模式的看法,或者你试图找到另一种设计模式,其很好地解决了这个问题,它甚至会更好。



文章来源: Switching between ModalViews