2014-07-17 44 views
0

我已经有段时间没有编码iOS了,而且我正在目睹一些新行为,并且想知道它是如何工作的。如何使用UITableViewController的新单元格重用行为初始化单元格

它曾经是cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]会返回一个细胞或不,但我现在看到的代码示例缺少初始化部分:

if (cell == nil) { 
    cell = [MyCellClass new];//and I think somehow registering the cell with the identifier 
    //Some code here, for example: 
    //[cell.button addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside]; 
} 

难道要做到这些初始化每次现在,没有检查细胞的存在?

编辑:我的使用情况的详细信息: 我的手机有一个NIB文件,我用我的ViewControllerviewDidLoad[[self tableView] registerNib:[UINib nibWithNibName:@"cell" bundle:nil] forCellReuseIdentifier:@"cell"]。我的ViewController不存在于任何Nib/StoryBoard中。

回答

1

dequeueReusableCellWithIdentifier:forIndexPath:保证返回一个单元格,并且一直是(它已被添加到iOS 6中)。

你记得dequeueReusableCellWithIdentifier:,它在iOS 6之前使用过,它没有相同的保证。新的API更好用:)

+0

我明白了。现在,安装ControlEvent侦听器的最佳做法是什么?在每个'tableView:cellForRowAtIndexPath:',应该调用'addTarget:action:forControlEvents:'? (考虑到在我的使用情况下,它应该以编程方式完成。单元格和控制器不在同一个笔尖/故事板中) – Mabedan

+0

要判断一行是否被轻敲(大概这就是你想要做的?), tableView:didSelectRowAtIndexPath:在你的表视图控制器中。 –

+0

我试图检测单元格内的UIButton是否已被挖掘 – Mabedan

1

使用registerNib:forCellWithReuseIdentifier:时,会自动处理细胞创建。

docs

此前调用dequeueReusableCellWithReuseIdentifier:forIndexPath:集合视图的方法,您必须使用此方法或的registerClass:forCellWithReuseIdentifier:方法告诉集合视图如何创建一个给定类型的新单元格。如果指定类型的单元当前不在重用队列中,则集合视图将使用提供的信息自动创建新的单元对象。

相关问题