如何恢复在UITableViewCell

时间:2015-10-14 05:42:02

标签: ios objective-c uitableview tableviewcell

我有一个名为UITableViewCell的自定义Hobbies

一切都很好。除了一个UIIssue。

当用户点击任何cell时,我想要更改该Cell的文字颜色。当用户选择另一个时,我希望之前选择的cell应该返回其原始状态

目前,我可以更改Cell选择的颜色,但在用户选择其他颜色时无法将其还原。

以下是我用来更改特定单元格的textColor的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath]; 
cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f];

}

当用户选择另一个单元格时,如何将其还原。

6 个答案:

答案 0 :(得分:2)

您可以创建UITableViewCell的对象说previousCell,并在每次选择时分配它。这将是您最后选择的单元格,每次单击新单元格时都可以为其指定默认颜色。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath];
    previousCell.dateLabel.textColor = [UIColor blackColor]; //Assuming that this is the color you want to go back 
    cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f];
    previousCell = cell;
} 

答案 1 :(得分:2)

声明此变量

int selectedIndex;
在你的cellForRowAtIndexPath

if(indexPath.row == selectedIndex)
{
cell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f];
}
else
{
    cell.dateLabel.textColor = [UIColor colorWithWhite:0 alpha:0.5f];//your default cell color
}

并在你的didSelectRowAtIndex

selectedIndex = indexPath.row;
[tableView reloadData];

答案 2 :(得分:1)

您应该始终牢记单元格是可重复使用的,因此您更改的单元格将用于滚动时显示其他行。

相反,您应该保留一个自己的模型数组来保存数据(在您的情况下是颜色信息),并仅使用单元格来显示它。

要恢复颜色,只需保留对最新NSIndexPath的引用。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     MyRowModel *prevRowModel = [self.rowModels objectAtIndex:self.lastIndexPath.row];
     prevRowModel.color = [UIColor colorWithWhite:255 alpha:1f];

     MyRowModel *rowModel = [self.rowModels objectAtIndex:indexPath.row];
     rowModel.color = [UIColor colorWithWhite:255 alpha:0.5f]; 

     [self.tableView reloadRowsAtIndexPaths:@[indexPath, self.lastIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
     self.lastIndexPath = indexPath;
}

答案 3 :(得分:1)

如果您要重新加载tableview,请尝试此操作。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  // reload the table 
  [tableView reloadData];
 HobbiesCell *cell = (HobbiesCell*)[tableView cellForRowAtIndexPath:indexPath];
previousCell.dateLabel.textColor = [UIColor colorWithWhite:255 alpha:0.5f]; // color insert which you want to insert 
}

希望在没有添加变量的情况下帮助您。

答案 4 :(得分:1)

尝试 cell.textLabel.highlightedTextColor

    if (cell == nil) {

        ........
         /* your cell initiation code */
        ........

        cell.textLabel.textColor = [UIColor whiteColor];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.textLabel.highlightedTextColor = [UIColor orangeColor];
    }

答案 5 :(得分:-2)

您需要维护对当前所选indexPath的引用。有点像...

@property (nonatomic, strong) NSIndexPath *currentHobby;

然后在您的didSelectRowAtIndexPath:方法中插入此内容......

if(_currentHobby && ![_currentHobby isEqual:indexPath]) {
    HobbiesCell *currentCell = [tableView cellForRowAtIndexPath:_currentHobby];
    currentCell.dateLabel.textColor = [UIColor originalColor];
}
_currentHobby = indexPath;

然后在cellForRowAtIndexPath:中确保包含...

if([indexPath isEqual:_currentHobby]) {
    cell.dateLabel.textColor = [UIColor selectedColor];
} else { 
    cell.dateLabel.textColor = [UIColor originalColor];
}