从非视图类(Objective-C)获取presentViewController



我试图用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;
}

相关内容

  • 没有找到相关文章

最新更新