3

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

我正在使用故事板,因此 UI 被分割成场景。

在 iPhone 故事板中,所讨论的特定场景最适合表格视图。在 iPad 故事板中,故事板中的等效场景将理想地实现 UICollectionView 并因此在网格中呈现内容。

两个视图都应该实现一个pull-to-refresh控件,在一种情况下将调用[UITableView reloadData],在另一种情况下调用[UICollectionView reloadData]。

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

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

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

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

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

有什么建议吗?

非常感谢,

加利福尼亚州。

4

2 回答 2

2

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

于 2014-03-18T11:26:37.883 回答
0

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

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

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

于 2013-07-30T13:56:12.810 回答