dismissViewControllerAnimated 在 iOS 9 中不起作用
Posted
技术标签:
【中文标题】dismissViewControllerAnimated 在 iOS 9 中不起作用【英文标题】:dismissViewControllerAnimated not working in iOS 9 【发布时间】:2017-05-13 06:48:50 【问题描述】:我有一个名为NewsViewController
的UIViewController
子类,它有一个从按钮操作调用的完成块属性。控制器被设置并呈现在另一个视图控制器中,如下所示:
newsViewController.completionBlock = ^
[self dismissViewControllerAnimated:YES completion:nil];
;
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];
[self presentViewController:navigationController animated:YES completion:nil];
在 ios 10 中,这一切正常,但在 iOS 9 中,视图并没有被关闭。如果我在那里设置断点,它确实会被命中。
我尝试了以下方法但没有成功:
从主线程调用它(同步和异步)
我已经像这样使用 GCD 尝试过:
dispatch_async(dispatch_get_main_queue(), ^
[self dismissViewControllerAnimated:YES completion:nil];
);
我也尝试过将解除调用放入一个方法然后调用
[self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO];
我实际上并不认为问题出在线程上,因为从完成块中调用 [NSThread isMainThread]
返回 YES。
延迟调用它
[self performSelector:@selector(dismissModalView) withObject:nil afterDelay:0.1];
在另一个视图控制器上调用关闭
我尝试在navigationController
、self.presentedViewController
和self.presentingViewController
上调用它。
直接从 NewsViewController 调用驳回
在调用完成块的按钮动作中,我直接调用了[self dismissViewControllerAnimated:YES completion:nil]
。
顺便说一句。只是为了好玩,我尝试从presentViewController
方法的完成块调用dismiss 方法,它确实被解除了。
【问题讨论】:
【参考方案1】:我终于找到了问题所在,这是非常出乎意料的。问题是NewsViewController
出现在我的登录视图控制器上。此控制器允许用户使用 Touch ID 登录,因此它在其viewDidAppear
方法中请求 Touch ID 提示。显然,这与取消显示的视图相混淆,并且似乎只在 iOS 9 中(嗯,也许不仅如此,但它似乎在 iOS 10 中工作正常)。
【讨论】:
【参考方案2】:试试下面的代码:
newsViewController.completionBlock = ^
[self performSelector:@selector(Dismiss) withObject:nil afterDelay:0.3];
;
-(void)Dismiss
[self dismissViewControllerAnimated:YES completion:^
];
【讨论】:
我不确定我会用这个完成什么。使用您的代码,我将在关闭NewsViewController
后再次显示它。这根本不是我想要的,无论如何它也无法解决我的问题(一开始就无法解雇)。
您需要在完成时将其关闭,然后只在完成块中写入没有任何内容的关闭。
你的代码会给我一个无限循环。在完成块中,您再次呈现相同的视图控制器。因此,当视图被关闭时,它将再次呈现。
正如您从我最初的问题中看到的那样,我已经尝试过这种方法。但无论如何,我现在已经找到了问题的根源。以上是关于dismissViewControllerAnimated 在 iOS 9 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
dismissViewControllerAnimated:completion: 导致内存崩溃
在当前动画完成之前开始dismissViewControllerAnimated
调用了dismissViewControllerAnimated,但没有解除ViewController
状态恢复后,dismissViewControllerAnimated 没有使用相同的动画
dismissViewControllerAnimated() 不会关闭视图控制器
dismissViewControllerAnimated:completion: 方法替换在 Xcode4.6.1 上不起作用