2011-02-15 127 views
2

所以我有两个视图控制器,当应用程序加载时,我在应用程序委托上加载。一个是登录页面,我有一个用户名和密码,另一个是UITabBarViewController。用户登录后,我只是删除登录视图,因此显示UITabBarViewController。问题是在我的UITabBarViewController中,我需要ViewController的用户名和密码。我该如何解决这个问题?ViewController数据共享

附加信息:

这里基本上是我想做的事:

  • 应用与登录开始于页:用户ID,密码和登录按钮
  • 在点击登录按钮,在验证凭证后,我们必须让用户进入下一个屏幕,在顶部有一个导航栏(基本上是一个UINavigationController)
  • 表视图底部

  • 标签栏现在登录后,我想在UITabBarViewController所有ViewControllers才能够获得用户名和密码,用户在第一次登录界面进入。

  • 回答

    4

    我认为最好的设计是有标签栏的控制器呈现模态视图控制器进行登录。控制器选项卡将成为LoginViewController的委托,LoginViewController将在登录完成时通知其委托。登录成功完成后,标签栏的控制器可以关闭LoginViewController。

    现在我在更新答案后编写了这段代码。你可以弄清楚如何添加UINavigation栏和你自己的表格视图。问题是关于在视图控制器之间传递数据而不是我回答如何通过一堆视图在一起。如果您想了解更多关于将完整应用程序的许多视图和控制器放在一起的信息,我强烈建议您使用iOS编程的斯坦福大学的iTunes U课程。

    我提供了一个完整的,完整的工作示例,演示如何正确使用委托在LoginViewController和UIViewController之间共享数据(在您的情况下,UIViewController将被替换为您的标签栏控制器)。我还演示了如何使用NSUserDefaults来保存可从别处访问的这些数据是应用程序。

    该示例的所有代码可以找到here

    0

    1使用根控制器共享数据。

    您可以将数据放入根控制器,并且根控制器创建两个视图。

    根控制器可以将数据传输到其子视图。

    2或者使用类构造函数。

    当您创建视图时,您可以为它们提供带有数据的参数。

    +0

    根控制器在哪里? – aherlambang 2011-02-15 05:04:56

    +0

    我认为他们的意思是appDelegate。这是不好的,因为像这样分享全球数据不是好设计。它增加了来自viewcontrollers的应用程序委托的依赖性。这使得他们很难在其他程序中重用。 – Evan 2011-02-15 05:08:37

    0

    这不是一个大问题。

    您可以在appDelegate类中创建两个NSString变量并将其属性设置为它们。这样你就可以在整个项目中访问这些变量。

    您将在登录页面中设置值,您将访问tabBarController中的值。

    就是这样。

    Reagards,

    萨蒂亚

    +0

    像这样共享全局数据并不是很好的设计。它增加了来自viewcontrollers的应用程序委托的依赖性。这使得他们很难在其他程序中重用。 – Evan 2011-02-15 05:07:41