在我的应用程序中,我有一个tableview,选择了单元格时的背景颜色,我将该代码写为
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.backgroundColor = [UIColor whiteColor];
}
问题是当我滚动表视图时,禁用了单元格的背景颜色,白色是不可见的,意味着删除了背景颜色效果。滚动滚动时,表视图将单元格重复使用,以便除去单元背景效果。我知道我在哪里遇到问题,但我不知道如何处理此问题并保留所选单元的背景颜色,因为白色甚至滚动了桌子视图。请告诉我解决这个问题的解决方案。
更改所选行背景的最佳方法是在创建单元格时更改selectedBackgorundView
。这样,您无需处理didSelectRowAtIndexPath:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"myCellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor whiteColor];
cell.selectedBackgroundView = v; // Set a white selected background view.
}
// Set up the cell...
cell.textLabel.text = @"foo";
return cell;
}
这是不起作用的,因为细胞被重复使用。因此,您的背景颜色可能会在电池重复使用后尽快被覆盖。
您应该使用单元格背景。正如普尔基特(Pulkit)已经写的那样。