【问题标题】:Cocoa Touch UIViewController Properties and class designCocoa Touch UIViewController 属性和类设计
【发布时间】:2009-07-23 20:30:00
【问题描述】:

我正在创建一个自定义 ViewController。此 VC 需要加载一些在创建它的事件中已知的数据,并将其推送到它将成为其中一部分的 NavigationController 的顶部。

我的问题是,我应该如何将处理自定义 ViewController 创建的视图中的数据传递到该自定义 ViewController 中。

我想到了四种可能的选项,我希望得到反馈,说明为什么每个选项都适用于此功能。

1) 在自定义 ViewController 中公开公共属性,并根据 - (void) ViewDidLoad 中的这些属性设置视图中的 UI 元素。

2) 公开实际的 UI 元素本身,并在创建 ViewController 时设置它们的 .text/.image/.whatever 属性。

3) 为自定义视图创建一个自定义构造函数并传入我需要设置 UI 元素的值

4) 创建两个视图都可以访问的自定义模型,在创建/推送 CustomView 之前设置数据,并在 ViewDidLoad 事件中访问该数据。

我对这一切还是陌生的,我想确保我了解正确处理这些数据的交接。似乎这样的事情可能是一个简单的答案,但我仍然有点困惑,这样做可能真的很重要,以避免记忆丢失/泄漏。

另外,如果有人关心,我正在使用斯坦福大学在 iTunes U 上的 CS193p 课程和 Mark/Lamarche 的“开始 iPhone 开发”来自学 iPhone 可可。我正在开发一个带有 NavigationController 和几个 ViewControllers 的应用程序(如果你熟悉 193p,Presence 1)。

【问题讨论】:

    标签: cocoa-touch uiviewcontroller


    【解决方案1】:

    嗯,我相信每种方法都有优点和缺点,具体取决于您的要求……通常需要结合一些方法。无论如何,对我来说,我相信最常见的是做这样的事情,只要你付出足够的努力就可以开始。

    MyViewController *vc = [[MyViewController alloc] init]; // (or initWithNibName:bundle:)
    // transfer vc values here
    vc.value1 = aValue;
    vc.value2 = anotherValue;
    [self.navigationController pushViewController:vc animated:YES];
    [vc release];
    

    在您的视图控制器被实例化后,您就有机会将对象传递给它。假设 MyViewController 是一个详细视图,那么您将为其提供将显示其详细信息的对象。或者,如果它是一个表格视图,您可以给它显示所需的 NSArray。然后在 viewDidLoad 或 awakeFromNib 或 awakeFromCoder 中,或者……你可以填写视图……可以这么说。

    【讨论】:

      【解决方案2】:

      #1 没问题,有无#3 都可以(这两个不互斥)

      #4 是我的首选解决方案。例如,如果我有一个 UserViewController,我可能还希望有一个 User 对象并以这种方式创建它:

      User *user = [self.users objectAtIndex:someIndex];
      UserViewController *uvc = [[[UserViewController alloc] initWithUser:user] autorelease];
      

      #2 不是一个好主意。对象不应访问其他对象的 UI 元素。当你决定改变你的 UI 时(而且你会的),这会带来很多麻烦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多