我试图用UIAlertController替换对已弃用的UIAlertView的调用。显示警告的类不是视图控制器,所以我不确定用什么来代替"self presentViewController"。
对于背景,这是我如何显示警告使用UIAlertView:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
这是我打算用UIAlertController替换的:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
然而,如前所述,我不能使用"self presentViewController"从这个位置,所以我试图获得(和使用)这样的视图控制器:
UIViewController *viewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[viewController presetViewController:alert animated:YES completion:nil];
上面的代码导致编译错误," No visible @interface for 'UIViewController'声明了选择器'presetViewController:animated:completion:' "。
我该如何解决这个问题?
谢谢!
PS:这是显而易见的,虽然我没有说出来,但我是一个Objective-C新手。我花了20多年的时间在另一个操作系统上编写c++…此代码:[viewController:alert animated:YES completion:nil];
错误。应该是[viewController presentViewController:alert animated:YES completion:nil];
尽管如此,你还需要确保你在屏幕上呈现来自当前视图控制器的警报。如果你只有一个视图控制器,这将工作得很好,但如果你在你的根vc(或2,或10)上呈现了另一个视图控制器,你会想要得到那个呈现的vc,并让那个vc呈现警告。
下面是一个例子:
+ (UIViewController*)getActiveViewController
{
UIViewController* vc = [[UIApplication sharedApplication] delegate].window.rootViewController;
while(vc.presentedViewController)
{
vc = vc.presentedViewController;
}
return vc;
}