2

我正在做的是这样的:

UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[rootController presentViewController:alarmController animated:YES];

我想要实现的是,将我的 AlarmRingViewController 推到目前正在显示的任何其他控制器之上,并且到目前为止它可以工作。

现在我想知道这是否是一个好习惯:

  • 每次应该呈现一个新的 viewController
  • 在非 UI 相关的类中这样做?(在我的例子中是 NSTimer 的调度程序)
  • 从那里推送新创建的 viewController,顶部有 rootViewController

或者这是否违反了 MVC 模式或 Apple 准则或任何其他内容。干杯

4

2 回答 2

1

我个人认为这是丑陋的代码。它很难阅读,也很难调试。将代码拆分一下:

UIViewController *rootController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[rootController presentViewController:alarmController animated:YES];

在一行中输入这么多内容没有任何好处。

更新:根据您更新的问题:

每次需要时都实例化一个新的视图控制器是没有问题的。这是很常见的。创建一个并缓存它可能是合适的。如果在任何给定时间只显示一个视图控制器,这种优化可能是有意义的,视图控制器经常使用,并且需要大量时间来创建。

视图控制器通常由其他(视图)控制器创建和呈现。

于 2013-04-11T16:40:37.433 回答
0

为什么不直接使用 UINavigationController 作为根视图控制器。这样,您可以这样做:

AlarmRingViewController *alarmController = [[AlarmRingViewController alloc] init];
[self.navigationController presentViewController:alarmController animated:YES completion:nil];
于 2013-04-11T17:06:56.147 回答