ios - tableView如何新建一个类作为数据源和代理?
PHPz
PHPz 2017-04-18 09:05:45
0
2
362

网上的 iOS 案例教程中,UITable 都是用 ViewController 作为数据源和代理,比如:

self.listTableView.dataSource = self;
self.listTableView.delegate   = self;

但是这样做 ViewController 会变得很长,如何新建一个文件来存储数据源和代理方法?

PHPz
PHPz

学习是最好的投资!

membalas semua(2)
Peter_Zhu

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.

巴扎黑

Kedua-duanya = kelas baharu anda, cuma laksanakan kaedah protokol dalam kelas baharu

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan