过去,我总是在视图控制器的“viewDidLoad”方法中为单元格注册类和重用ID。当视图控制器符合UITableViewDataSource并充当表的数据源时,它可以正常工作。但是,我想创建一个充当数据源的独立类。
换句话说,在“viewDidLoad”中调用“registerNib:forCellReuseIdentifier:”或“registerClass:forCellReuseIdentifier:”会在视图控制器和充当数据源的类之间创建一个非常紧密的绑定,并违反了数据源实现:具体来说,在实现“cellForRowAtIndexPath:”时,数据源必须使用相同的类并重用视图控制器中指定的id。
是否存在数据源可以指定类和重用ID的方法,并保持视图控制器隐藏其内部实现细节?
答案 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。