我有一个名为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];
}
当用户选择另一个单元格时,如何将其还原。
答案 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;
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];
}