【问题标题】:UITableView vs UITableViewControllerUITableView 与 UITableViewController
【发布时间】:2018-08-10 18:03:37
【问题描述】:

有人可以向我解释 UITableViewController 相对于 UITableView 的优势吗?一般来说,我使用控制器,但基本的表格视图似乎更灵活。

【问题讨论】:

    标签: iphone


    【解决方案1】:

    我总是使用 UITableView。我从不使用 UITableViewController。

    使用 UITableViewController 令人困惑。除了容器控制器之外,每个控制器都应该做一个屏幕。

    好吧,UITableViewController 是一个控制器,而且大多数时候,tableView 并不是唯一的东西。

    如果您查看文档: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html

    UITableViewController 相比 UITableView 提供的新界面非常少。这些都不是必需的。

    – initWithStyle: 
    

    (呃?我在 nib 中启动了我的 tableView 并且我自定义了很多)

    获取表格视图

      tableView  property 
    

    (原来的tableView)

    配置表格行为

      clearsSelectionOnViewWillAppear  property 
    

    (好的,只需在 ViewWillAppear 上添加一些代码)

    刷新表格视图

      refreshControl  property 
    

    [tableView 重新加载]?

    你看,

    因此,除非您希望您的代码看起来更整洁(而不是更多),否则没有理由使用 UITableViewController,据我所知。

    【讨论】:

    • 只有 UITableViewController 可以有静态内容。 developer.apple.com/library/ios/documentation/UserExperience/…
    • 另外,UITableViewController 有一些功能(例如,取消突出显示导航弹出)并且已经为您完成了设置,因此您不必重新发明轮子/调整任何与布局相关的内容(尤其是 iOS 7 之后的版本),它从一开始就按预期工作。如果我需要与表格以外的其他子视图共享屏幕,我只会推荐您的方法。
    【解决方案2】:

    我认为你不明白你自己的问题。

    UITableViewController 是一个控制器。

    UITableView 是一个视图。

    一个并不比另一个更好,它们是完全不同的对象,用于完全不同的事情。

    我会花一些时间通过 Cocoa 和 iPhone SDK 学习模型-视图-控制器模式。

    The Model-View-Controller Design Pattern

    【讨论】:

    • 我不确定 OP 是否意味着这一点,但我有一个类似的问题可能意味着什么:使用 UITableViewController 与包含一个 UITableView?
    • 我对你的答案投了反对票,因为这是他的问题。我也是。到底是谁投票给了14..?它们并不完全不同-它们是相关的,因此问题是有效的。你什么时候会继承 UITableView?与 tableView 相比,tableViewController 的用途是什么?我想我知道答案..
    • .. 但如果我知道我就不会搜索它。
    • 我认为他的问题在这里问得更准确:stackoverflow.com/questions/9694185/…
    • UITableViewController 只是一个 UIViewController + UITableView 加上一些小代码,所以 Kieran 的问题是绝对有效和有意义的。这个答案根本不问问题。
    【解决方案3】:

    这个想法是 ViewControllers 拥有一个子视图树(和子视图控制器)并管理向/从其子视图调度事件。例如,您可能有一个包含图像的视图,并且该视图位于处理方向更改和内存警告等的视图控制器中。

    【讨论】:

      【解决方案4】:

      这是我对 Cocoa 感到非常困惑的一件事:Apple 的 MVC 实现(或至少他们使用的术语)是有问题的。在 Cocoa 中,就 MVC 模式定义它们而言,大多数视图本身实际上以某种身份充当控制器(只需查看 UITableView——它的大多数方法实际上都是控制器方法)。因此,在某种程度上已经是控制器的基础上,您拥有 Apple 的视图控制器的附加概念。您甚至根本不需要使用 UITableViewController(即使使用数据绑定)这一事实基本上证明了视图正在充当自己的控制器。在 MVC 中,您不能在没有控制器的情况下将视图绑定到模型(这是 MVC 中控制器的整个点)。

      在 Apple 的开发人员看来,“视图控制器”(例如 UITableViewController)实际上更像是一个更高级别的帮助器/管理器类,它管理更底层的 UITableView 类并启用几个 em> 键 additional capabilities 更多地涉及表格视图如何与应用程序的常规 UI 交互。

      此外,Apple 似乎打算让视图控制器实际上更像是一个屏幕控制器,建议每个屏幕只使用一个视图控制器(大概意味着您不能嵌套视图控制器)。我认为将这个概念称为视图控制器是用词不当。

      请不要犹豫,请任何人纠正我,我自己对 Obj-C/Cocoa 还是很陌生。

      【讨论】:

        【解决方案5】:

        UITableView 是一个视图,UITableViewController 是一个以 UITableView 作为其根视图的控制器。

        所以,通过使用UITableViewController:

        1. 您有一个根视图,它本身就是UITableView。所以它比UITableView 占用更少的内存,UIView 作为其控制器中的父视图。

        2. 如果您需要一个控制器和一个UITableView 作为其主要显示视图,它会为您提供一个即用型模板。

        3. 静态表视图仅在嵌入UITableViewController 实例时有效。

        【讨论】:

          【解决方案6】:

          上面的链接返回“页面未找到”。出于某种原因,即使是更正后的 link 在超链接时也会返回“找不到页面”(也许 Apple 不允许链接到他们的开发者网站)。

          要查找相关信息,请访问 Apple 的 Developer Connection (http://developer.apple.com/index.html) 并搜索“cocoa model-view-controller design pattern”。

          在结果表中,选择“Cocoa Fundamentals Guide: Cocoa Design Patterns”。在该页面上,向下滚动左侧的目录,直到看到“模型-视图-控制器设计模式”项。选择该项目以阅读有关该特定设计模式的更多详细信息。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-11-22
            • 1970-01-01
            • 2010-10-26
            • 2014-10-22
            • 1970-01-01
            • 1970-01-01
            • 2014-02-07
            • 2012-03-30
            相关资源
            最近更新 更多