dismissViewControllerAnimated

dismissViewControllerAnimated

我在理解iOS视图控制器和警报控制器在特定情况下的工作方式时遇到问题:

我有一个自定义的UINavigationController,其中有我的UIViewController。我的导航控制器已覆盖dismissViewControllerAnimated:completion方法。从这个UIViewController中,我提出了新的UIAlertController。直到用户单击“警报”中的任何按钮,一切正常。但是,奇怪的是,我的自定义UINavigationController的dismissViewControllerAnimated:completion方法正在被调用(如果可能,我不希望这样做)。

警报以常规方式显示(从UINavigationController中的UIViewController):

UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"yep" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    [self takeOrder:data];
}];

UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"nope" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

}];

[confirmOrderAcceptAlert addAction:okAction];
[confirmOrderAcceptAlert addAction:cancelAction];

[self presentViewController:alert animated:YES completion:nil];

有什么选择可以防止这种行为?为什么首先发生这种情况?

编辑:dismissViewControllerAnimated:completion的代码:
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
    self.isHeroEnabled = NO;
    [super dismissViewControllerAnimated:flag completion:completion];
}

我正在使用Hero库为过渡设置动画,是这样吗?

最佳答案

当您继承UINavigationController的子类时,肯定会调用dismissViewControllerAnimated:completion。

为了避免它干扰库代码,请检查特定的ViewController类型。

例如:

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion {
    if(![self.visibleViewController isKindOfClass:[UIAlertController class]]){
            self.isHeroEnabled = NO;
    }
    [super dismissViewControllerAnimated:flag completion:completion];
}

关于ios - 关闭UIAlertController时调用的UINavigation的dismissViewControllerAnimated方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43237667/

10-10 20:28