iOS从cellForRowAtIndexPath方法获取当前和以前选择的UITableViewCells

时间:2016-02-05 20:59:47

标签: ios uitableview tableviewcell didselectrowatindexpath

所以基本上我现在正在做的是通过选择它们并使用heightForRowAtIndexPath来改变它们的高度来扩展我的单元格,如果我再次选择它或选择一个不同的单元格,那些单元格将扩展或恢复到它们的正常大小。

但是,在单元格扩展时,我有一些额外的数据要在展开的部分中显示,更改单元格的背景颜色并设置我在tableviewcell子类中定义的一些其他属性。因此,当单元格处于其正常高度时,背景将为浅绿色。当它扩展时,它需要是白色的。我设置了我的tableviewcell子类属性(一个BOOL),这样当它再次循环遍历单元格时(cellforRowatindexpath)我可以根据需要更新这些属性。不幸的是,我还没能找到一种方法来获取在cellForRowAtIndexPath中选择的当前单元格。

以下是相关代码。请记住,我想跟踪当前选定的单元格和前一个单元格(如果与当前单元格不同),以便我可以更新两个单元格属性。一次只能扩展一个单元格。当选择并扩展当前单元格时,前一个单元格(如果适用)将收缩回正常高度。我的configureCell方法就是根据其BOOL属性分配属性。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:myIdentifier forIndexPath:indexPath];

    [cell configureCell:self.item[indexPath.row] isCollapsed:cell.isCollapsed];

    return cell;
}


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    MyCustomCell *currentCell;
    MyCustomCell *previousCell;

    self.currentSelectedIndex = indexPath;
    //assign previous and current if previous is nil
    if(!self.previousSelectedIndex){
        self.previousSelectedIndex = self.currentSelectedIndex;
        currentCell = [tableView cellForRowAtIndexPath:self.currentSelectedIndex];
        currentCell.isCollapsed = NO;
    }
    //we have tapped the same cell as before
    else if(self.previousSelectedIndex == self.currentSelectedIndex){
        previousCell = [tableView cellForRowAtIndexPath:self.previousSelectedIndex];
        previousCell.isCollapsed = YES;
        self.previousSelectedIndex = self.currentSelectedIndex = nil;
    }
    //if they aren't equal, then collapse the previous selected cell
    //and expand the current selected cell
    else{
        previousCell = [tableView cellForRowAtIndexPath:self.previousSelectedIndex];
        previousCell.isCollapsed = YES;

        currentCell = [tableView cellForRowAtIndexPath:self.currentSelectedIndex];
        currentCell.isCollapsed = NO;
        self.previousSelectedIndex = self.currentSelectedIndex;

    }

    [tableView beginUpdates];
  if(self.currentSelectedIndex){
    [tableView reloadRowsAtIndexPaths:@[self.currentSelectedIndex, self.previousSelectedIndex] withRowAnimation:UITableViewRowAnimationAutomatic];
}

    [tableView endUpdates];
}

所以,显然我的当前和之前的单元格会在我们离开这个方法时被删除,因为它们是本地的,但我正在努力解决如何:

一个。重新加载会导致cellForRowAtIndexPath再次执行的单元格(这在尝试使用reloadRows时有效 - 但也许我做错了)

b.once cellForRowAtIndex开始遍历单元格如何捕获currentCell和previousCell,以便我可以更新其内容,如上所述。 [dequeueReusableCellWithIdentifier:myIdentifier]只是得到一个我不想要的新单元格。

细胞膨胀和收缩很好,这不是问题。

0 个答案:

没有答案