【问题标题】:iOS Universal App - UITableView/UICollectionViewiOS 通用应用程序 - UITableView/UICollectionView
【发布时间】:2013-07-30 15:36:46
【问题描述】:

我正在尝试开发一个通用的 iOS 应用程序,理想情况下我正在尝试尽可能多地重复使用代码。

我正在使用情节提要,因此 UI 被分割成场景。

在 iPhone 故事板中,有问题的特定场景最适合表格视图。 在 iPad 情节提要中,情节提要中的等效场景理想情况下会实现 UICollectionView,从而在网格中呈现内容。

两个视图都应该实现一个下拉刷新控件,在一种情况下调用 [UITableView reloadData],在另一种情况下调用 [UICollectionView reloadData]。

任何人关于如何获得最大数量的代码重用的任何建议,即。控制器类是什么样的?

一种选择是拥有 1 个同时符合 UITableView 协议和 UICollectionView 协议的整体类,但这感觉不对。

另一种选择是创建一个基类,然后使用 iPhone 和 iPad 的特化子类对其进行子类化。虽然这感觉更干净,但我仍然认为可能有更好的方法。在我第一次尝试时,感觉特化类中的代码比基类中的要多。

我考虑的第三个计划是简单地在两个应用程序中使用 UICollectionView,从而消除控制器的复杂性。希望我可以将集合视图的布局强制为 iPad 上的网格,同时告诉它模仿 iPhone 上的表格视图。

虽然从表面上看这听起来很容易,但我正在努力让 UICollectionView 像正常的表格视图一样工作。

有什么建议吗?

非常感谢,

加利福尼亚州。

【问题讨论】:

  • 你决定走哪条路了吗?

标签: ios uitableview uicollectionview ios-universal-app


【解决方案1】:

如果您没有使用某些特定的UITableView 功能[1],那么让UICollectionView 看起来完全像一张桌子是微不足道的。我想我会选择使用UICollectionView,因为它会在未来提供更大的灵活性,而且无论如何你都必须使用它。

【讨论】:

    【解决方案2】:

    当您谈论代码重用时,您可能指的是DRY principle。它只是说您不应该两次编写相同的代码或相同的信息,但我认为这不是您的主要问题。

    我会在 iPhone 上使用 UITableViewController,在 iPad 上使用 UICollectionViewController。我认为这是最干净和最简单的方法。您希望在两个控制器之间重用什么?两者都需要两种不同的委托协议,因此大多数方法将特定于一个平台。如果您使用 Core Data,您将需要两个 NSFetchedResultsController,但仅当您在两个平台上需要相同的数据时,重用获取的结果控制器代码才有意义。

    如果您在 Xcode 中创建一个新的通用项目,您将获得一个在 iPhone 和 iPad 上看起来不同的基本项目设置。在开始编程之前尝试理解它(有一些细节需要注意),我认为它至少会回答你的一些问题。

    【讨论】:

    • 感谢您花时间回答。也许我在努力实现的目标上过于“纯粹”。就我想要避免重复的内容而言,两个控制器都会有一个拉动刷新控制 - 所以有一个处理程序。处理程序本质上将调用 AFNetworking 上的方法以在两种情况下返回完全相同的数据。然后它还会在集合视图或表格视图上调用 reload。
    • 抱歉,我的原始评论被缩短了,我很想知道我是否忽略了一些明显的事情。在 WPF 中,控件是基于层次结构的,因此在这种情况下,您可能已经找到了一个通用的基类或接口并针对它进行了编码。我知道代表是不同的,但他们之间的关系如此密切,以至于感觉不对。无论如何,看起来我没有忽略任何事情,而且肯定有更大的问题需要担心!再次感谢。 C.
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多