gpt4 book ai didi

iphone - 为什么 UITableViewController 不应该管理 Cocoa Touch 中窗口的一部分?

转载 作者:行者123 更新时间:2023-12-03 19:07:33 28 4
gpt4 key购买 nike

我有一个包含 UITableViewUILabel 的 View ,据我所知,它工作得很好。我真的不想使用相同的 Controller 来管理 UIViewUITableView,因为 UITableViewController 处理大量内务工作,并且根据 documentation :

If the view to be managed is a composite view in which a table view is one of multiple subviews, you must use a custom subclass of UIViewController to manage the table view (and other views). Do not use a UITableViewController object because this controller class sizes the table view to fill the screen between the navigation bar and the tab bar (if either are present).

为什么 Apple 警告不要使用它?如果我忽略此警告会发生什么?

更新:最初我引用了 Apple Documentation 中的以下内容:

You should not use view controllers to manage views that fill only a part of their window—that is, only part of the area defined by the application content rectangle. If you want to have an interface composed of several smaller views, embed them all in a single root view and manage that view with your view controller.

虽然这个问题可能与 UITableViewController 设计为全屏的原因有关,但它并不是完全相同的问题。

最佳答案

每个屏幕仅使用一个 View Controller 的主要实际原因是因为这是管理导航的唯一方法。

例如,假设您的屏幕有两个单独的 View Controller ,并且您使用导航 Controller 加载它。您推送两个 View Controller 中的哪一个以及如何加载和引用第二个 View Controller ? (更不用说同时协调两个独立 Controller 的开销了。)

我认为使用单个自定义 Controller 并不像您想象的那么麻烦。

请记住,TableviewDataSource 和 TableViewDelegate 不需要位于实际 Controller 中。Apple 模板只是为了方便而这样做。您可以将实现这两​​种协议(protocol)的方法放在一个类中,或者将它们分别放入自己的类中。然后,您只需将它们与自定义 Controller 中的表链接起来即可。这样,自定义 Controller 所要做的就是管理 TableView 本身的框架。所有配置和数据管理都将位于单独且独立的对象中。如果您需要来自其他 UI 元素的数据,自定义控件可以轻松地向它们发送消息。

这种灵 active 、定制性和封装性是首先使用委托(delegate)设计模式的原因。您可以自定义任何东西,而无需创建一个可以完成所有操作的怪物类。相反,您只需弹出一个委托(delegate)模块即可。

Edit01:回复评论

如果我正确理解您的布局,您的问题是 UITableViewController 被硬连线设置表格以填充可用 View 。大多数时候,表格 View 本身就是顶 View ,这是有效的。 UITableViewController 的主要功能是定位表格,因此如果您使用非标准布局,则不需要它。您可以只使用通用 View Controller 并让 Nib 设置表格的框架(或以编程方式执行)。就像我说的,很容易认为委托(delegate)和数据源方法必须位于 Controller 中,但事实并非如此。您应该完全删除 tableViewController,因为它在您的特定设计中没有任何作用。

关于iphone - 为什么 UITableViewController 不应该管理 Cocoa Touch 中窗口的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159686/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com