在很多应用程序中,我写了很多次,我不得不从某些类没有参考当前可见控制器的模态中呈现控制器。 (例如,呈现用于显示产品的下载进度的控制器的StoreKit交易观察者)。什么是从任何地方呈现UIViewController的推荐方式?
With Three20,我可以使用- [TTNavigator visibleViewController]
来完成工作,但如果我不想使用框架呢?我应该重新实现一个像TTNavigator
那样的自定义函数吗? Apple API中可能有类似的方法吗?例如,为我的应用程序中的所有控制器创建一个通用的父类,然后使用NSNotificationCenter
来处理所有应用程序范围内的通知,会更好吗? (这当然会有在一个类中具有不相关代码的副作用)
我真的很惊讶苹果没有在他的标准API中提供这个基本功能。或者,这个问题对我来说反复出现的事实是一个糟糕的设计实践的迹象?
谢谢你的详细解答。在App Delegate中,我确实有一个对根视图控制器的引用(通过主窗口)。但是它仍然不能让我立即获得当前可见的控制器,因为目前可能存在模态控制器,导航堆栈可能更复杂。至于我给出的例子,现在我按照你所说的处理问题:虽然苹果不赞成这样做,但我将商店控制器设置为交易的观察者,因为应用程序完成启动后应尽快处理未完成的事务。 – eugeniodepalo 2011-04-20 10:11:24
嗯,好的 - 我没有考虑过你已经显示模态控制器的可能性(即模态内的模态)。如果是这种情况,最简单的方法可能就是覆盖窗口并将其转储到整个应用程序视图层次结构的顶部。 – lxt 2011-04-20 11:27:53