0

我有一个应用程序,我在其中使用 cell.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"cell_gray_with_line.png"]];. 但是,当我在 didselect 中选择之后执行此操作时,它不会在推动后将我的背景更改回之前的视图

if (indexPath != nil) {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];    
}   

弹出回此视图控制器时,我需要与正常相同的背景,而无需重新加载表视图。有谁能够帮我?

4

5 回答 5

1

您应该为您的UITableViewCell.

  1. 背景视图
  2. 选定的背景视图

此外,您应该设置cell.selectionStyleUITableViewCellSelectionStyleNone.

于 2013-03-05T06:47:25.613 回答
1

如果 UITableViewControllers 的clearsSelectionOnViewWillAppear属性设置为 YES,将取消选择 viewWillAppear 上的选定行。如果您没有使用具有该设置的表视图控制器(我认为默认为 YES),请自己做:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}

实现 did (或 will) 取消选择委托方法并修复您的颜色:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    // do what you want to the cell
}

顺便说一句,SO 上的其他人建议在单元格的内容视图上设置颜色(不是cell.backgroundColor,而是cell.contentView.backgroundColor),并在willDisplayCell:forRowAtIndexPath:.

于 2013-03-05T06:52:29.103 回答
0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    //First you get the cell you want to change
    UITableViewCell* theCell = [tableView cellForRowAtIndexPath:indexPath];

    //Then you change the properties (label, text, color etc..) in your case, the background color
    theCell.contentView.backgroundColor=[UIColor redColor];

    //Deselect the cell so you can see the color change

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}
于 2013-03-05T06:50:55.263 回答
0

这应该做,

- (void)viewDidAppear:(BOOL)animated
{
 [super viewDidAppear:animated];
 [self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow] ].backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"normal.png"]];
}
于 2013-03-05T06:50:38.263 回答
0

与@dand 相同的答案,但稍作修改。

- (void) viewWillAppear: (BOOL) animated
{
    [super viewWillAppear: animated];

    NSIndexPath *indexPath = [self.tableview indexPathForSelectedRow];
    [self.tableview deselectRowAtIndexPath: indexPath animated: YES];
}

并在您的自定义单元实现中修改此方法。

- (void) setSelected: (BOOL) selected animated: (BOOL) animated
{
    [super setSelected: selected animated: animated];
    // Configure the view for the selected state

    if (selected)
    {
        self.backgroundColor = [UIColor redColor];
    }
    else
    {
        self.backgroundColor = [UIColor clearColor];
    }
}
于 2017-02-03T09:43:36.873 回答