iOS:在自定义UITableViewCell中的touchDown上更改contentView backgroundColor

时间:2015-09-17 14:27:19

标签: ios objective-c uitableview uibutton

问题

我需要在自定义UITableViewCell中的touchDown事件上更改contentView的backgroundColor属性。我已经在单元格中添加了一个UIButton,但似乎无法弄清楚如何重新加载单元格并更改单元格的contentView backgroundColor。

我尝试过的事情:

我将目标添加到cellForRow中的UIButton:atIndexPath:像这样:

[cell.touchButton addTarget:self action:@selector(touchButtonAtIndexPath:) forControlEvents:UIControlEventTouchDown];

这是我应该重新加载所选单元格的方法:

-(void) touchButtonAtIndexPath:(NSIndexPath *)indexPath {

    cellSelected = YES;

    [self.tableView beginUpdates];
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];

}

当该单元格重新加载时,这是应该更改contentView的背景颜色的代码:

if (cellSelected) {
    cell.contentView.backgroundColor = [UIColor blueColor];
}

我在touchButtonAtIndexPath:方法中收到错误,这是错误:

-[UIButton section]: unrecognized selector sent to instance

任何人都知道如何在touchDown上更新自定义UITableViewCell的contentView backgroundColor?谢谢!

2 个答案:

答案 0 :(得分:1)

使用这些委托函数:

func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) {
   // Do your stuff when selected
}


func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) {
  // Do your stuff when unselected

}

答案 1 :(得分:1)

1:如果向按钮添加操作,则接收参数将是触发事件的按钮,而不是NSIndexPath。

2:最简单的解决方案就是处理单元格内的按钮操作并更改那里的背景颜色

考虑到这些,您的代码可能是这样的:

在您的单元格中,当您进行设置时,您可以将操作定位添加到单元格本身。因此,在您的自定义tableview单元格中,您可以在设置方法中添加目标,或者甚至可以从stroyboard中执行此操作:

[self.touchButton addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchDown];

在同一个单元格中,您可以处理点击事件,并更改背景颜色

-(void) buttonTouched:(UIButton)button {
   self.contentView.backgroundColor = [UIColor redColor];
}