iOS从多个视图访问数据

时间:2013-12-18 13:57:00

标签: ios objective-c cocoa-touch global-variables tabview

我有一个包含多个视图的iOS应用。

用户首次看到的登录UIView,在输入正确的凭据后,他将被带到主要TabBarViewController,“管理”其余视图。

登录UIView通过模式Segue连接到TabBarViewController。我还使用此Segue通过使用属性将数据从Login视图传递到TabBarViewController。一切都很好,直到现在。

如上所述,还有其他视图与此TabBarViewController相关联,此标签栏仅显示它们。

问题是,如何在其他视图中访问TabViewController的属性(loginView设置了某个值)? 我希望能够从多个其他视图访问此属性。

感谢。

5 个答案:

答案 0 :(得分:1)

1.为您的AppDelegate添加一个属性,将自动为您实现setter和getter

2.在您的其他班级中访问该属性,如:id value = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] myGreatProperty];

答案 1 :(得分:0)

你在这里没有说清楚的事情。我假设您已经分组UITabBarController

如果所有视图控制器都是标签栏控制器的子项,那么self.tabBarController将允许您访问标签栏。

最终可能看起来像这样:

if ([self.tabBarController isKindOfClass:[MyTabBarController class]]) {
    MyTabBarController *myTabBarController = (MyTabBarController *)self.tabBarController;
    // …
}

答案 2 :(得分:0)

如果你想从不同的ViewControllers共享相同的数据,而不是UIView,那么最好的方法是使用Singleton类来设置和获取你想要的数据/属性。

如果您不知道如何编写Singleton,那么一个好的教程是here

答案 3 :(得分:0)

将这些数据放入应用程序的Delegate中,这实际上是一个Singleton。另一种方法是将控制器的引用传递给需要访问其他数据的其他控制器。

答案 4 :(得分:0)

您可以创建用于提供属性数据的协议。确认选项卡控制器到您的协议并实现此协议的方法。 然后在所有视图中使用此协议声明属性

id <YourProtocolName> delegate

当您从选项卡控制器设置选项卡控制器创建视图作为创建视图的委托时。在它之后你可以调用视图

[self.delegate access_method_from_protocol]