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

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

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

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

阅读 3.9k
2 个回答

关于这个其实就是超大的源代码如何拆分的问题。
这边推荐给你几种方法,都比较好。

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

没有万能的方案,找一个适合你的才好。

都=你新建的类,在新建的类里实现协议方法就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题