如何在UITableView中安全地调用tableView:cellForRowAtIndexPath?

时间:2013-05-29 10:42:05

标签: ios ios6 uitableview

我在故事板中设置了一个带有原型单元格的tableview。 现在我想编辑单元格的子视图,如果它被刷过,所以我实现了委托方法tableView:willBeginEditingRowAtIndexPath:。 如何从此方法中获取当前正在编辑的单元格?如果我使用tableView:cellForRowAtIndexPath:我得到一个新的单元格,而不是我需要的单元格,因为后续调用dequeueReusableCellWithIdentifier:forIndexPath:似乎返回相同标识符和indexPath的不同对象。

我可以使用以下代码轻松重现此行为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    NSLog(@"cell = %@", cell);
    cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    NSLog(@"different cell = %@", cell);
}

因此,当我无法使用此方法时,如何获取放置在特定indexPath的当前单元格? 我正在使用iOS 6。

3 个答案:

答案 0 :(得分:4)

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

on UITableView

答案 1 :(得分:2)

使用此选项访问单元格并对其进行修改:

   NSIndexPath *indexPath = [NSIndexPath indexPathForRow:your_row inSection:your_section];
    UITableViewCell *currentCell = [you_table cellForRowAtIndexPath:indexPath];
    id anySubview = [currentCell viewWithTag:subview_tag]; // Here you can access any subview of currentcell and can modify it.

希望它对你有所帮助。

答案 2 :(得分:0)

这对我来说也有点混乱。因为我不知道它是新建的还是现有的。对于那种情况,我使用

- (NSArray *)visibleCells

UITableView的方法。从那个阵列中获取。为了确定我正在寻找哪一个使用tag属性或我将indexpath属性添加到单元格,这是在cellForRowAtIndexPath:方法中设置的。如果单元格不在数组中,则无论如何它都是不可见的,并且当用户滚动时将使用cellForRowAtIndexPath:方法创建。