nev*_*ing 10 iphone uiviewcontroller modalviewcontroller ios
我有一些代码要清理viewWillDisappear:,我只想在视图移回父视图控制器时使用.
- (void)viewWillDisappear:(BOOL)animated
{
if ([self isMovingFromParentViewController] || [self isBeingDismissed]) {
NSLog(@"isMovingFromParentViewController or isBeingDismissed");
// clean up
}
[super viewWillDisappear:animated];
}
Run Code Online (Sandbox Code Playgroud)
视图可以以两种方式呈现:它可以由导航控制器推动,或者呈现为模态视图控制器(来自相同的导航控制器).如果它被按下,然后弹出(按下后退按钮),我的清理代码就会运行.如果它呈现为模态视图控制器,然后被解雇,则代码不会运行.
我这样解雇:
[rootViewController dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)
我的问题是:isBeingDismissed当我解雇我的视图控制器时为什么没有设置?
Yuv*_*Tal 23
如果这是模式导航控制器中的第一个视图控制器正在被解除,self.isBeingDimissed()则从viewWillDisappear:返回调用false.
但是,由于整个导航控制器正在被解雇,实际工作的是self.navigationController?.isBeingDismissed()返回true.
正如@Yuval Tal所提到的,当您解除嵌入在导航控制器中的控制器时,此标志不起作用.这是我使用的扩展:
extension UIViewController
{
var isAboutToClose: Bool {
return self.isBeingDismissed ||
self.isMovingFromParentViewController ||
self.navigationController?.isBeingDismissed ?? false
}
}
Run Code Online (Sandbox Code Playgroud)
当标准.isBeingDismissed无效时,如果发现另一种情况,可以轻松扩展.如果你发现,让我们在评论中告诉我.
你的问题是你如何驳回你的模态视图。rootViewController 是如何定义的?
当我打电话[self dismissModalViewControllerAnimated:YES]时,[self isBeingDismissed]结果为 true。
当我调用[parentViewController dismissModalViewControllerAnimated:YES]then[self isBeingDismissed]时,其值为 true,其中parentViewController 是呈现模式视图的 UIViewController(注意:不是 UINavigationController)。