我在理解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/