在不同的UIViewControllers中显示相同的UIView实例

时间:2011-08-12 13:25:15

标签: iphone objective-c ios cocoa-touch uiview

是否有可能以某种方式存储UIView实例,以便可以从其他视图控制器访问它?我知道这可能接近他们认为不好的“全局”,但我离题了。我所知道的是我有几个UITabBar选项卡需要引用在一个选项卡中实例化的视图的同一个实例,需要在另一个选项卡中再次显示。做这样的事情的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用依赖注入,将相同的视图实例注入视图控制器,如下所示:

UIView *myView = [UIView new];
UIViewController *controller1 = [UIViewController new];
UIViewController *controller2 = [UIViewController new];
controller1.view = myView;
controller2.view = myView;
[myView release];

答案 1 :(得分:1)

不确定。您只需要在持久对象中存储对UIView对象的保留引用。例如,您可以向UIApplicationDelegate子类添加保留属性。您可以让该委托实例化视图,并且所有控制器只会向应用程序委托询问该视图。如果您有一个始终可用的根视图控制器,则可以将其保留在那里。

也许仔细考虑应用的整体结构可以帮助找到存储UIView的“正确”位置。下面我介绍一个我经常使用的应用程序结构,不一定是关于如何构建应用程序的建议,而是作为扩展选项的示例,您可以考虑帮助您考虑应用程序的最佳结构。

我为客户写了很多类似手册的宣传册。在这些应用程序中,我需要提供一些视图,每个视图有点类似于小册子中的页面。其中一些视图将具有用户交互,并且需要在屏幕外保持其状态,或与其他视图共享状态数据。

为了管理这些应用,我创建了一个演示管理器对象。此对象将保留应用程序的整体状态,包括未显示时必须保留的视图。我使用一个拥有表示管理器的主UIViewController,负责所有常见的视图控制操作。对于每个视图,各个视图的特定逻辑将在UIView子类中。这些单独的视图由表示管理器创建,可以向管理员询问它所知道的内容,包括任何持久性视图。

答案 2 :(得分:0)

B / c你使用UITabBar我建议你将自定义视图添加到app delegate中的窗口。然后你不必存储它,只需隐藏它。您可以使用NSNotificationCenter发送通知以显示视图,也可以调用appDelegate并手动显示视图。