调用cellForRowAtIndexPath:是否实用?

Eri*_*ber 7 uitableview ios

我见过很多很多实施时,开发人员UITableViewDelegateUITableViewDataSource直接调用cellForRowAtIndexPath:要么:

1)检索单元格以获取它们存储在单元格中的模型元素:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    MyCell *cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];
    int secretCode = cell.secretCode;
    LaunchMissileViewController *vc = [[LaunchMissileViewController alloc] initWithSecretCode:secretCode];
    [self.navigationController pushViewController:vc];
}
Run Code Online (Sandbox Code Playgroud)

2)尝试设置单元格样式(这有明显的问题,但似乎很常见):

MyCell *cell = (MyCell *)[self cellForRowAtIndexPath:indexPath];
// or [tableView cellForRowAtIndexPat:indexPath];
cell.backgroundColor = [UIColor greenColor];
Run Code Online (Sandbox Code Playgroud)

它是安全的,使毯声明说:"只有框架应该不断打电话cellForRowAtIndexPath:"?或者是否有一个人们可能自称的实际原因?

rma*_*ddy 8

就个人而言,我认为没有好的案例可以直接直接调用tableView:cellForRowAtIndexPath:数据源.

对于情况#1,它只是糟糕的编码.单元格永远不应包含数据.数据源应该具有数据,因此从实际数据源而不是单元获取数据.

对于案例#2,您只需要更新可见单元格.为此,您可以使用该UITableView cellForRowAtIndexPath:方法.无需为单元调用数据源.

我尝试永远不要说"从不",但它应该是一个非常罕见的情况,你真正需要通过调用数据源方法来获取单元格.