网上的 iOS 案例教程中,UITable 都是用 ViewController 作为数据源和代理,比如:
self.listTableView.dataSource = self;
self.listTableView.delegate = self;
但是这样做 ViewController 会变得很长,如何新建一个文件来存储数据源和代理方法?
天蓬老师2017-04-18 09:07:45
關於這個其實就是超大的原始碼如何拆分的問題。
這邊推薦給你幾種方法,都比較好。
1.獨立的datasource,delegate管理類別
@interface MyTableManager : NSObject <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
- (void)setupWithTableView:(UITableView *)tableView
@end
@interface MyTableManager ()
@property (nonatomic, strong) NSMutableArray *array;
@end
@implement MyTableManager
- (void)setupWithTableView:(UITableView *)tableView
{
if (_tableView != tableView) {
_tableView = tableView;
_tableView.delegate = self;
_tableView.dataSource = self;
// ...
// _array = ?
}
}
#param mark - DataSource
// ...
#param mark - Delegate
// ...
@end
然後你只要在viewController裡適合的地方初始化這個manager,然後裝載tableView就可以了。
這個方法的好處是如果你多處用同樣的管理邏輯,那麼非常好的將程式碼分開開了。
如果你只是想減少viewController的行數,而這個管理類別並不適合各個viewController,那麼還有一個方法,也蠻好的。
2.利用category來拆分文件
// MyViewController.h
@interface MyViewController (TableView) <UITableViewDelegate, UITableViewDataSource>
@end
// MyViewController+TableView.m
@implement MyViewController (TableView)
// ...
@end
沒有萬能的方案,找一個適合你的才好。