繁体   English   中英

我应该将数据存储在自定义UITableView中吗?

[英]Should I store data in my custom UITableView?

我有2个viewControllers,每个viewControllers包含一个UITableView和其他子视图。 2个UITableView具有相同的节结构和单元格类型,但数据源不同。

因此,我决定将此UITableView提取到自定义UITableView中。 自定义UITableView实现了诸如tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ,并且是其自己的数据源和委托。 viewController仅提供数据。

问题是我不知道哪种方法是viewController提供数据的最佳方法。 我可以想到两种方式:

第一路

在MyCustomTableView.h中:

@protocol MyCustomTableViewDataProvider <NSObject>
- (NSArray*)dataArray;
@end

@interface MyCustomTableView : UITableView
@property (nonatomic, weak) id<MyCustomTableViewDataProvider> dataProvider;
@end

viewController应该实现以下协议:

- (NSArray*)dataArray {
    return self.dataArray;
}

在MyCustomTableView.m中,我可以像这样使用它:

NSArray* dataArray = [self.dataProvider dataArray];

第二种方式

在MyCustomTableView.h中:

@interface MyCustomTableView : UITableView
@property (nonatomic, weak) NSArray* dataArray;
@end

每当数据发生变化时,viewController应该通知自定义TableView更新其数据:

self.customTableView.dataArray = self.dataArray;

在MyCustomTableView.m中,我可以像这样使用它:

self.dataArray

似乎第二种方法可以保存一些代码,但是我听说您不应该在视图中存储数据,因为它违反了MVC原理。 你能给我一些建议吗? 非常感谢!

恕我直言,除非绝对必要,否则我不会继承任何UIView。 TableViews和Collections均提供协议以正确控制其行为。

如果您是我,为了保持ViewController简洁明了,我将创建一个自定义NSObject,同时实现UITableViewDelegate和DataSource协议。 此类将负责提供单元格和节的样式(在这两个表视图中共享)以及数据源。 当然,该对象必须具有引用其TableView的属性。

ViewController仅在需要时负责触发数据检索。 该数据应传递到该自定义NSObject,后者将负责更新表视图。

顺便说一句,甚至可以通过InterfaceBuilder添加该对象。

我知道它有些旧,但是您可以检查一下:更轻便的VC这只是迈向MVVM的一步。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM