搜索

首页  >  问答  >  正文

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

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

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

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

PHPzPHPz2893 天前377

全部回复(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
  • 取消回复