我正在做的是:
UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[rootController presentViewController:alarmController animated:YES];
我想要实现的目的是将我的AlarmRingViewController推到目前正在显示的任何其他控制器的顶部,并且它到目前为止是有效的。
现在我想知道这是不是很好的做法:
或者这是否违反了MVC模式或苹果指南或其他任何内容。 欢呼声
答案 0 :(得分:1)
我个人认为这是丑陋的代码。它难以阅读且难以调试。将代码拆分一点:
UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[rootController presentViewController:alarmController animated:YES];
在一行中输入这么多内容没有任何好处。
更新:根据您更新的问题:
每次需要时,实例化新的视图控制器都没有问题。这很常见。创建一个并缓存它可能是合适的。如果在任何给定时间只显示其中一个视图控制器,视频控制器经常使用,并且创建需要花费大量时间,那么这是一个有意义的优化。
视图控制器通常由其他(视图)控制器创建和显示。
答案 1 :(得分:0)
为什么不直接使用UINavigationController作为根视图控制器。这样,您可以这样做:
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[self.navigationController presentViewController:alarmController animated:YES completion:nil];