【问题标题】:UIViewController Design Pattern multiple UITableViewsUIViewController 设计模式多个 UITableViews
【发布时间】:2012-07-21 21:48:40
【问题描述】:

我有一个视图来显示 UITableView 中的商店列表。

用户应该可以修改某些过滤器显示的商店。 例如,应该可以显示按名称排序的商店(第一个字母作为部分标题)。此外,用户应该能够只显示收藏夹按类别对商店进行排序(类别名称是部分标题):

我不想要一个表格视图来处理所有过滤器,因为我认为根据当前过滤器的不同,这会是一堆 if-then-else 标记。所以我决定创建 4 UITableViewControllers 每个都处理一个过滤器。

这正是我需要的,到目前为止没有冗余,因为 tableVC 委托和数据源方法是需要以不同方式实现的方法。

但现在我确实需要一个根据表格滚动位置出现的标题。这在所有 4 个表中完全相同。但是我现在应该如何解决这个问题呢?

在四个 UITableViewControllers 中分别实现 UIScrollViewDelegate 方法是多余的吗?创建一个处理 scrollView 方法的 ParentViewController(由于 table 数据源和委托方法,这不会那么容易......

任何建议如何正确解决这个问题?你会怎么做?

如果有任何帮助,我将不胜感激,在此先感谢。

【问题讨论】:

    标签: iphone objective-c ios ipad uitableview


    【解决方案1】:

    我将创建一个父类,负责处理标题并从中派生过滤器的 UITableViewControllers。

    超类负责公共元素(如标题),子类负责实际显示。

    或者,您可以创建一个重载方法,该方法返回要显示的单元格数组。

    存储这个数组,当委托(在超类中)请求“单元格数据”时,给他数组中的相应元素。

    【讨论】:

    • 好的,谢谢,这正是我的初衷(继承)。我没有得到您的替代方案,请您再解释一下吗?
    • “替代”实际上是一个“插件”。不是将“cellForRow”方法(dataSource)传递到较低级别(这可能需要您复制“单元实例化代码”),而是创建一个(重载)方法,该方法以标准格式填充数组。当 Tableview 要求显示一个单元格 (cellForRow) 时,它会从该数组中读取(因为它是标准格式,所以您知道如何将其转换为单元格),并且 cellForRow 方法负责实际的格式设置。我会为您提供一些实际代码,但那是在我的工作场所。
    • 啊,我明白了,为这个干杯!最后我选择了继承方式来正确实现。
    • 我很高兴能提供帮助。感谢您的支持和“正确”:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2012-05-09
    • 2012-04-27
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多