搜尋

首頁  >  問答  >  主體

ios - tableView如何新建一个类作为数据源和代理?

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

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

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

PHPzPHPz2893 天前379

全部回覆(2)我來回復

  • 天蓬老师

    天蓬老师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

    沒有萬能的方案,找一個適合你的才好。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:07:45

    都=你新建的類,在新建的類別裡實作協定方法就行了

    回覆
    0
  • 取消回覆