【问题标题】:Is there a better way to load View Controllers from a table view?有没有更好的方法从表视图加载视图控制器?
【发布时间】:2012-10-21 17:03:56
【问题描述】:

这可能是一个非常基本的问题,但我还没有找到答案。 我有一个 UITableView 作为我的应用程序的菜单。选择表格视图上的每一行时,都会打开 UIViewController 的不同子类。

目前,我的代码的工作方式与 Apple 的 UICatlog 示例中使用的方式相同。 在主视图控制器(表格视图)中,每个菜单项都在一个数组(menuList)中的字典中进行描述。每个字典都包含该屏幕的 UIViewController 子类的实例和有关菜单项的其他数据。当用户选择一行时,didSelectRow atIndexPath 启动并调用适当的视图控制器,存储在 menuList 数组的 indexPath.row 的字典中。

在表格视图首次加载时分配和初始化每个视图控制器似乎非常浪费。

我的问题是:有没有比 UICatalog 中演示的更好的方法来分配/初始化我的视图控制器子类,仅在点击关联的行时? (我知道我可以在 didSelectRow 中使用复杂的 if..else 结构,但这会导致 didSelectRow 方法非常长并破坏封装。我想知道是否有更简洁的方法来执行此操作,分配和初始化适当的基于视图控制器字典中的数据)

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    user1349768 尝试使用 Storyboard,但此功能仅适用于 iOs 4 及更高版本。

    【讨论】:

      【解决方案2】:

      只是一个建议...将每个视图控制器的一些引用放入 NSArray 中,然后在该行被点击时启动并继续它们(并且只需从 objectAtIndex 获取引用:)。

      【讨论】:

      • 谢谢,但我没有使用情节提要。我的应用程序的构建类似于 UICatalog 示例代码。
      • 在没有故事板和序列的情况下应该可以以同样的方式编程,或者只是推送子视图(不知道确切的方式放绝对可能)。
      • Offcourse 我正在推送子视图,这不是问题(参见 UICatalog 示例代码)。问题是如何仅在需要时干净地分配/初始化正确的视图控制器子类,而不创建冗长而混乱的 didSelectRow 方法。
      • 我会在 TableViewController viewDidLoad 中将它们分配/初始化到 NSArray 中,然后在 didSelectRow 中只推送具有给定索引的视图。
      • 这就是代码已经做的......我正在尝试找到一种更有效的方法。我不想在 tableview 加载的那一刻分配/初始化应用程序中的每个屏幕,只有用户请求的那个。
      【解决方案3】:

      虽然我找不到更好的方法来做到这一点,但每个分配的 View Controller 的内存签名只有 288 字节。由于苹果建议的解决方案比使用 switch case 语句更优雅和可扩展,所以我保持原样。

      【讨论】:

        猜你喜欢
        • 2012-02-06
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 1970-01-01
        • 2017-09-17
        • 2014-11-17
        相关资源
        最近更新 更多