簡體   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