如何使UITableView数据源独立于UIViewController

时间:2014-04-29 02:27:04

标签: ios objective-c uitableview

过去,我总是在视图控制器的“viewDidLoad”方法中为单元格注册类和重用ID。当视图控制器符合UITableViewDataSource并充当表的数据源时,它可以正常工作。但是,我想创建一个充当数据源的独立类。

换句话说,在“viewDidLoad”中调用“registerNib:forCellReuseIdentifier:”或“registerClass:forCellReuseIdentifier:”会在视图控制器和充当数据源的类之间创建一个非常紧密的绑定,并违反了数据源实现:具体来说,在实现“cellForRowAtIndexPath:”时,数据源必须使用相同的类并重用视图控制器中指定的id。

是否存在数据源可以指定类和重用ID的方法,并保持视图控制器隐藏其内部实现细节?

2 个答案:

答案 0 :(得分:0)

让您的dataSource / delegate有一些方法可以根据自己的喜好配置表格视图。

例如,在您的数据源对象中:

- (void)configureTableView:(UITableView *)tableView
{
    [tableView registerClass:[SomeClass class] forCellReuseIdentifier:@"SomeIdentifier"];
}

或者,稍微更尴尬(IMO),当你接到cellForRowAtIndexPath的电话时(在你实际出队之前)注册它。您应该确保每个表视图只注册一次。

答案 1 :(得分:0)

充当数据源的自定义类必须符合UITableViewDataSource协议,但没有什么能阻止它符合您定义的其他协议。例如,您可以使用将nib名称和单元ID作为输入的方法来定义协议,并且应该在调用时注册该NIB。

或者,自定义类的指定初始值设定项可以是initWithNibName:andCellID:。分配/初始化自定义类时,传递nib名称和单元ID,并让自定义类注册NIB。