ViewController的模式,可以显示为TableViewController或CollectionViewController

时间:2014-05-19 19:00:14

标签: ios cocoa-touch uitableview design-patterns uicollectionview

在我的应用程序中,我有一个ViewController,它将在iPhone上显示内容为UITableViewController,在iPad上显示UICollectionViewController,我希望只有一个MYContentViewController分别显示正确的ViewController。 这是多重继承的理想情况,其中我有一个MYContentTableViewControllerMYContentCollectionViewController,每个都继承自UITable/CollectionViewControllerMYContentViewController,但很明显Cocoa不支持多重继承,那么最佳解决方案是什么?

另外,我不希望MyContentViewController只有UITableViewUICollectionView,因为从iOS7开始,如果使用实际,那么你会得到时髦的转换 UICollectionViewController。

目前我正在考虑使用Protocols和'ParentViewController'是最好的方式但如果有一种方法不让'ParentViewController'与{{1}相关,我会很喜欢它}}:

addChildViewController

@protocol MYContentViewControllerDelegate <NSObject> - (void)didSelectItemAtIndexPath:(NSIndexPath *)indexPath; @end @protocol MYContentViewControllerDataSource <NSObject> - (MYDataProvider *)dataProviderForIndexPath:(NSIndexPath *)indexPath; - (NSInteger)numberOfItemsInSection:(NSInteger)section; - (NSInteger)numberOfSections; @end @protocol MYContentViewController <NSObject> - (void)reloadData; - (void)reloadSections:(NSIndexSet *)sections; - (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths; - (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths; - (void)insertItemsAtIndexPaths:(NSArray *)indexPaths; @property (nonatomic, weak) id <MYContentViewControllerDataSource> dataSource; @property (nonatomic, weak) id <MYContentViewControllerDelegate> delegate; @end 将实现dataSource和委托,因此它将提供所有数据并对Collection和Table的所有交互起作用,并拥有“父”视图控制器的任何交互(如导航按钮交互)。对于表格和集合,MyContentViewControllerMyContentViewController

1 个答案:

答案 0 :(得分:1)

我要尝试的第一件事是将UITableView视为UICollectionView的一个简单模拟的特殊情况,具有垂直布局和全宽度单元格。

然后,您只能使用具有两种布局和单元格类型的常规UICollectionViewController。其中一种布局/单元格类型可以设计为模仿UITableView/UITableViewCell