dismissViewControllerAnimated在块中不起作用

时间:2015-01-21 14:46:46

标签: ios iphone uiviewcontroller uialertcontroller

我尝试在显示UIViewController后关闭UIAlertController

这是我的代码:

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title 
                                                                         message:msg
                                                                  preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Accept" 
                                                   style:UIAlertActionStyleDefault 
                                                 handler:^(UIAlertAction *action)
             {
                 [self dismissViewControllerAnimated:YES completion:nil];
             }];

[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:^{}];

然而,self永远不会被解雇。谁知道如何解决这个问题?

更新

如果我在块之外设置[self dismissViewControllerAnimated:YES completion:nil];,它就可以了。

4 个答案:

答案 0 :(得分:10)

只需使用[super.navigationController popViewControllerAnimated:YES];

即可

答案 1 :(得分:6)

如果有人遇到同样的问题。我推了UIViewController,我没有用presentViewController:animated:completion:来呈现它。这就是为什么应该使用 [self.navigationController popViewControllerAnimated:YES];

奇怪的是[self dismissViewControllerAnimated:YES completion:nil];在街区之外工作但没有在里面,我没有解释这个......

答案 2 :(得分:5)

[self dismissViewControllerAnimated:YES completion:nil]将关闭当前正在显示视图(即“self”)正在显示的任何视图控制器。你想要做的是在呈现视图控制器上为“self”运行相同的方法。即。

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

答案 3 :(得分:2)

您是否检查了正在调用块的哪个线程?如果它不是线程1,则它不会正确地解除您的视图,因为UI操作只能在第一个线程上完成。尝试创建一个解除方法然后在主线程上调用它的方法:

    ...handler {
     [self performSelectorOnMainThread:@selector(dismissModalView) withObject:nil waitUntilDone:NO];
}];

-(void)dismissModalView {
     [self dismissViewControllerAnimated:YES completion:nil];
}