Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在ModalView之间切换_Iphone_Objective C_Cocoa Touch_Xcode_Model View Controller - Fatal编程技术网

Iphone 在ModalView之间切换

Iphone 在ModalView之间切换,iphone,objective-c,cocoa-touch,xcode,model-view-controller,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:se

场景:
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时,它工作正常。 如果此参数为,则viewB不会出现在屏幕上


如何使其与动画一起工作?

动画将需要一些时间,大约0.3秒。您无法看到动画何时完成(未发送代理方法),因此可以执行两项操作:

  • 以新方法呈现新的模态视图控制器,并以0.3秒的延迟调用该方法。这不是一个理想的解决方案,因为动画时间可能会有所不同,您永远无法确定动画是否真正完成
  • 将某种类型的标志实例变量添加到主视图控制器(表示模态视图控制器的那个)中,并将该标志设置为“是”(或者使用位进行设置,那么一个标志可以包含多个选项)。然后检入-[UIViewController ViewDidDisplay:]是否设置了该标志,当设置该标志时,显示模态视图控制器。
  • 可以确保动画已完成
  • 显示模态视图控制器应在其主视图控制器内完成

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

    动画将需要一些时间,大约0.3秒。您无法看到动画何时完成(未发送代理方法),因此可以执行两项操作:

  • 以新方法呈现新的模态视图控制器,并以0.3秒的延迟调用该方法。这不是一个理想的解决方案,因为动画时间可能会有所不同,您永远无法确定动画是否真正完成
  • 将某种类型的标志实例变量添加到主视图控制器(表示模态视图控制器的那个)中,并将该标志设置为“是”(或者使用位进行设置,那么一个标志可以包含多个选项)。然后检入-[UIViewController ViewDidDisplay:]是否设置了该标志,当设置该标志时,显示模态视图控制器。
  • 可以确保动画已完成
  • 显示模态视图控制器应在其主视图控制器内完成

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

    当图像选择器返回时,我会这样做,我需要对给定的图像采取一些措施。我不想在选择器完全解除之前启动该操作,因此我在前面设置了一个标志,并在
    -viewdide:
    中检查它。当图像选择器返回时,我会这样做,我需要对给定的图像执行一些操作。在选择器完全解除之前,我不想启动该操作,因此我在前面设置了一个标志,并在
    -viewdide:
    中检查它。