iOS 5:在解除iPad中的模态后不调用-viewWillAppear

Dev*_*ang 24 iphone objective-c ios4 ios5

我使用以下代码呈现模态:

AddName *add = [[AddName alloc] initWithNibName:@"AddName" bundle:nil]
add.modalPresentationStyle = UIModalPresentationFormSheet;

[self presentModalView:add animated:YES];
Run Code Online (Sandbox Code Playgroud)

在我工作之后,我使用以下代码返回主视图.

[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

因此它-viewWillAppear默认用于调用.

我的问题是,

它适用于iOS4.3.

但它不适用于iOS5.

我该怎么办 ?或者这是iOS5中的任何错误?

gai*_*ige 11

-viewWillAppear只保证在被调用的地方-viewWillDisappear调用.对于iPad上的大多数模态窗口,情况并非如此,因为它们不会遮挡整个页面.

问题的解决方案将取决于您需要的内容-viewWillAppear,但一般情况下,您可能需要直接从解雇模态视图控制器的相同位置拨打电话.

一种常见的机制,特别是在你可能在其他地方使用相同的模态视图的情况下,是给模态视图控制器一个委托,当视图即将消失时调用该委托.这将使您有机会从模态窗口获取响应,甚至只是在委托视图中强制重新加载数据.

希望这可以帮助.

  • 您可以尝试[[self presentsViewController] viewWillAppear:YES],而不是iOS5中的委托. (6认同)

Vin*_*nie 9

iOS 5肯定改变了对viewWillAppear和的调用viewWillDisappear.例如,当您将另一个视图控制器推入堆栈时,将调用View Controller's viewsa中的子视图(作为精确的子视图).但是,当弹出视图控制器时,不会被调用.这些方法在iOS 4中从未在子视图中调用过. UIScrollViewviewWillDisappearviewWillAppearUIScrollView

这对我来说很奇怪.结合不管应该发生什么,如果你可以依赖它在iOS 4中发生的事实,它在iOS 5中的工作方式应该不同.大多数时候,我不知道每个人调用哪个特定实例,我经常试错,因为我在区域编码.如果它按我喜欢的方式工作,我继续前进.然后iOS 5进来,并将一个破坏性的球扔进一切.

我也经历过一个UINavigationController's视图是一个子视图,一个ViewController被推到导航控制器堆栈上,viewWillAppear从未在iOS 4中被调用,但在iOS 5中被调用.去图.