dismissViewControllerAnimated在iOS 9中不起作用

时间:2017-05-13 06:48:51

标签: ios objective-c uiviewcontroller ios9 presentviewcontroller

我有一个名为UIViewController的{​​{1}}子类,它有一个从按钮操作调用的完成块属性。控制器已设置并显示在另一个视图控制器中,如下所示:

NewsViewController

在iOS 10中,这一切都运行正常,但在iOS 9中,视图并未被忽略。如果我在那里设置一个断点就会受到打击。

我尝试了以下但没有成功:

从主线程调用(同步和异步)

我已经尝试过使用这样的GCD:

newsViewController.completionBlock = ^{
    [self dismissViewControllerAnimated:YES completion:nil];
};

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];
[self presentViewController:navigationController animated:YES completion:nil];

我也通过将解雇调用放入方法然后调用

来尝试它
dispatch_async(dispatch_get_main_queue(), ^{
    [self dismissViewControllerAnimated:YES completion:nil];
});

我实际上并不认为问题是线程,因为在完成块内调用[self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO]; 会返回YES。

延迟致电

[NSThread isMainThread]

在另一个视图控制器上调用dismiss

我尝试在[self performSelector:@selector(dismissModalView) withObject:nil afterDelay:0.1]; navigationControllerself.presentedViewController上调用它。

直接从NewsViewController调用解雇

在调用完成块的按钮操作中,我直接调用self.presentingViewController

顺便说一下。只是为了好玩,我尝试从[self dismissViewControllerAnimated:YES completion:nil]方法的完成块中调用dismiss方法,并且它确实被解雇了。

2 个答案:

答案 0 :(得分:0)

尝试使用以下代码:

newsViewController.completionBlock = ^{
   [self performSelector:@selector(Dismiss) withObject:nil afterDelay:0.3];
};

 -(void)Dismiss
{
[self dismissViewControllerAnimated:YES completion:^{

    }];
}

答案 1 :(得分:0)

我终于找到了问题,这是非常意外的。问题是NewsViewController显示在我的登录视图控制器上。此控制器允许用户使用Touch ID登录,以便在其viewDidAppear方法中请求Touch ID提示。显然,这会解散所呈现的视图,而且似乎只在iOS 9中出现(好吧,也许不仅仅是,但它似乎在iOS 10中运行良好)。