【问题标题】:Custom UIView as UITableView delegate and datasource?自定义 UIView 作为 UITableView 委托和数据源?
【发布时间】:2011-09-21 22:52:37
【问题描述】:

我正在编写一个相当复杂的 iPad 应用程序 - 我的第一个更大的应用程序。

这个应用程序有一些自定义 UIViews 可以呈现相当复杂的数据,包括一个表格。这些视图不会占据整个屏幕,并且在任何时候都可能(并且很可能会)在屏幕上显示许多视图(尽管只有一个处于显示表格的“展开”状态)。

这是一个应该传达基本原则的基本示例:

请注意,这些东西不应该出现在弹出窗口中;相反,FamilyViews 会展开以显示其详细数据。 (还请注意,这个模型只是为了这个问题而创建的,与我的界面外观无关;我知道这不是好的屏幕设计)

我尚未决定将谁作为这些自定义视图的委托和数据源:

  • 为当前屏幕代理和数据源制作 ViewController 并不优雅,因为它不仅仅是 VC 主视图的一部分。
  • View 本身成为委托和数据源对我来说似乎有点奇怪,因为这感觉就像给视图赋予了过于活跃的角色;把它变成一个半控制器。
  • 使底层模型对象数据源看起来耦合得太紧,而且还破坏了 MVC。而且它没有回答谁应该是代表的问题。

我倾向于将这些“FamilyViews”中的每一个都作为它们自己的表的委托和数据源。这些表上的操作必须与 FamilyView 的委托(ViewController)耦合,但这应该不是问题,不是吗?

有人对此有意见吗?

【问题讨论】:

    标签: objective-c cocoa-touch ipad uitableview uiview


    【解决方案1】:

    视图应该知道如何根据它们的属性绘制自己和布局它们的子视图,仅此而已。

    您绝对应该让控制器类而不是视图本身成为委托。

    不过,委托控制器不必是显示视图的视图控制器。它很容易成为一个完全独立的控制器类,只知道如何处理视图需要的内容。

    【讨论】:

    • 感谢您的回答。我曾想过。所以你说我应该创建一个新类FamilyMembersTableViewController(那不是viewController 子类)并在每次我需要显示一个新的tableView 时实例化它?这将充当Family 模型和FamilyView 的中间人?这将保持 MVC 干净,但似乎有点不必要,因为 FamilyViews 无论如何都是非常专业的,并且会与它们的 tableControllers 紧密耦合。
    • 我认为单独的控制器是最好的解决方案。在版本。在你的应用程序 2.0 中,你将实现所有这些非常酷的东西,这些东西只有在控制器中才有意义,然后你必须重构。如果您现在按照 MVC 的方式进行操作,您以后会感谢自己的。 :)
    • 我想得越多,就越清楚这是要走的路。我已经实现了这个,它没有不良的副作用。感谢您帮助我看到了应该显而易见的解决方案 :) (尽管现在我面临一个更困难的问题:我应该给这个类起什么名字?留在这个例子中,FamilyMemberTableViewController 似乎既明显又令人困惑,因为它是既不是UIViewController 也不是UITableViewController 子类,但它UITableView 的控制器。)
    • 如果UITableViewControllerUITableView 的控制器,UITableView 是表格的视图,那么我建议FamilyMemberTableController。 :)
    • 是的,这可能是最终名称。不过,纯粹出于兴趣,它是表格的控制器,还是UITableView 的控制器?一个从哪里开始,另一个在哪里结束? UIKit 是否也能做出区分?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2012-07-01
    • 2012-12-07
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    相关资源
    最近更新 更多