Rumah > Soal Jawab > teks badan
网上的 iOS 案例教程中,UITable 都是用 ViewController 作为数据源和代理,比如:
self.listTableView.dataSource = self;
self.listTableView.delegate = self;
但是这样做 ViewController 会变得很长,如何新建一个文件来存储数据源和代理方法?
天蓬老师2017-04-18 09:07:45
Mengenai ini sebenarnya adalah masalah bagaimana untuk memisahkan kod sumber yang sangat besar.
Berikut adalah beberapa kaedah yang disyorkan kepada anda, semuanya lebih baik.
1. Sumber data bebas, perwakilan kelas pengurusan
@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
Kemudian anda hanya perlu memulakan pengurus di tempat yang sesuai dalam viewController, dan kemudian memuatkan tableView.
Kelebihan kaedah ini ialah jika anda menggunakan logik pengurusan yang sama di banyak tempat, kod itu boleh dibahagikan dengan baik.
Jika anda hanya ingin mengurangkan bilangan baris viewController, dan kelas pengurusan ini tidak sesuai untuk setiap viewController, maka terdapat kaedah lain, yang juga bagus.
2. Gunakan kategori untuk memisahkan fail
// MyViewController.h
@interface MyViewController (TableView) <UITableViewDelegate, UITableViewDataSource>
@end
// MyViewController+TableView.m
@implement MyViewController (TableView)
// ...
@end
Tiada penyelesaian satu saiz yang sesuai untuk semua, cuma cari yang sesuai dengan anda.
巴扎黑2017-04-18 09:07:45
Kedua-duanya = kelas baharu anda, cuma laksanakan kaedah protokol dalam kelas baharu