从非视图获取 presentViewController class (Objective-C)
Get presentViewController from non view class (Objective-C)
我正在尝试用 UIAlertController 替换对已弃用的 UIAlertView 的调用。显示警报的 class 不是视图控制器,所以我不确定用什么来代替“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' declares the selector 'presetViewController:animated:completion:'”。
我该如何解决?
谢谢!
PS:不用我说也很明显,但我是Objective-C新手。我花了 20 多年的时间在另一个 OS…
上编写 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;
}
我正在尝试用 UIAlertController 替换对已弃用的 UIAlertView 的调用。显示警报的 class 不是视图控制器,所以我不确定用什么来代替“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' declares the selector 'presetViewController:animated:completion:'”。
我该如何解决?
谢谢!
PS:不用我说也很明显,但我是Objective-C新手。我花了 20 多年的时间在另一个 OS…
上编写 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;
}