【发布时间】:2018-08-10 18:03:37
【问题描述】:
有人可以向我解释 UITableViewController 相对于 UITableView 的优势吗?一般来说,我使用控制器,但基本的表格视图似乎更灵活。
【问题讨论】:
标签: iphone
有人可以向我解释 UITableViewController 相对于 UITableView 的优势吗?一般来说,我使用控制器,但基本的表格视图似乎更灵活。
【问题讨论】:
标签: iphone
我总是使用 UITableView。我从不使用 UITableViewController。
使用 UITableViewController 令人困惑。除了容器控制器之外,每个控制器都应该做一个屏幕。
好吧,UITableViewController 是一个控制器,而且大多数时候,tableView 并不是唯一的东西。
UITableViewController 相比 UITableView 提供的新界面非常少。这些都不是必需的。
– initWithStyle:
(呃?我在 nib 中启动了我的 tableView 并且我自定义了很多)
获取表格视图
tableView property
(原来的tableView)
配置表格行为
clearsSelectionOnViewWillAppear property
(好的,只需在 ViewWillAppear 上添加一些代码)
刷新表格视图
refreshControl property
[tableView 重新加载]?
你看,
因此,除非您希望您的代码看起来更整洁(而不是更多),否则没有理由使用 UITableViewController,据我所知。
【讨论】:
UITableViewController 有一些功能(例如,取消突出显示导航弹出)并且已经为您完成了设置,因此您不必重新发明轮子/调整任何与布局相关的内容(尤其是 iOS 7 之后的版本),它从一开始就按预期工作。如果我需要与表格以外的其他子视图共享屏幕,我只会推荐您的方法。
我认为你不明白你自己的问题。
UITableViewController 是一个控制器。
UITableView 是一个视图。
一个并不比另一个更好,它们是完全不同的对象,用于完全不同的事情。
我会花一些时间通过 Cocoa 和 iPhone SDK 学习模型-视图-控制器模式。
【讨论】:
这个想法是 ViewControllers 拥有一个子视图树(和子视图控制器)并管理向/从其子视图调度事件。例如,您可能有一个包含图像的视图,并且该视图位于处理方向更改和内存警告等的视图控制器中。
【讨论】:
这是我对 Cocoa 感到非常困惑的一件事:Apple 的 MVC 实现(或至少他们使用的术语)是有问题的。在 Cocoa 中,就 MVC 模式定义它们而言,大多数视图本身实际上以某种身份充当控制器(只需查看 UITableView——它的大多数方法实际上都是控制器方法)。因此,在某种程度上已经是控制器的基础上,您拥有 Apple 的视图控制器的附加概念。您甚至根本不需要使用 UITableViewController(即使使用数据绑定)这一事实基本上证明了视图正在充当自己的控制器。在 MVC 中,您不能在没有控制器的情况下将视图绑定到模型(这是 MVC 中控制器的整个点)。
在 Apple 的开发人员看来,“视图控制器”(例如 UITableViewController)实际上更像是一个更高级别的帮助器/管理器类,它管理更底层的 UITableView 类并启用几个 em> 键 additional capabilities 更多地涉及表格视图如何与应用程序的常规 UI 交互。
此外,Apple 似乎打算让视图控制器实际上更像是一个屏幕控制器,建议每个屏幕只使用一个视图控制器(大概意味着您不能嵌套视图控制器)。我认为将这个概念称为视图控制器是用词不当。
请不要犹豫,请任何人纠正我,我自己对 Obj-C/Cocoa 还是很陌生。
【讨论】:
UITableView 是一个视图,UITableViewController 是一个以 UITableView 作为其根视图的控制器。
所以,通过使用UITableViewController:
您有一个根视图,它本身就是UITableView。所以它比UITableView 占用更少的内存,UIView 作为其控制器中的父视图。
如果您需要一个控制器和一个UITableView 作为其主要显示视图,它会为您提供一个即用型模板。
静态表视图仅在嵌入UITableViewController 实例时有效。
【讨论】:
上面的链接返回“页面未找到”。出于某种原因,即使是更正后的 link 在超链接时也会返回“找不到页面”(也许 Apple 不允许链接到他们的开发者网站)。
要查找相关信息,请访问 Apple 的 Developer Connection (http://developer.apple.com/index.html) 并搜索“cocoa model-view-controller design pattern”。
在结果表中,选择“Cocoa Fundamentals Guide: Cocoa Design Patterns”。在该页面上,向下滚动左侧的目录,直到看到“模型-视图-控制器设计模式”项。选择该项目以阅读有关该特定设计模式的更多详细信息。
【讨论】: