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

Posted

技术标签:

【中文标题】iOS:在自定义 UITableViewCell 中更改 contentView backgroundColor on touchDown【英文标题】:iOS: Change contentView backgroundColor on touchDown in custom UITableViewCell 【发布时间】:2015-09-17 14:27:18 【问题描述】:

问题

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

我的尝试:

我将目标添加到 cellForRow:atIndexPath: 中的 UIButton 中,如下所示:

[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?谢谢!

【问题讨论】:

【参考方案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


【讨论】:

我的手机对这些方法没有反应,但这真的不是我想要的。我想关闭高亮显示并制作自己的高亮显示。 这些方法是为突出个性化而构建的。我习惯在我的项目中使用它们【参考方案2】:

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

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

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

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

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

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

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

【讨论】:

这看起来像我需要的,但我不明白 buttonTouched: 方法是如何连接到单元格的。当我使用这段代码时,我得到一个非常明显的错误:在类型的对象上找不到属性'contentView'... 你必须在单元格内调用 addTarget 方法,并且 buttonTouched 方法也必须在你的自定义 tableview 单元格内实现。 我已经有了,我收到了这个错误,因为我正在传递 self.contentView,它应该类似于 cell.contentView。你明白我在说什么吗? 不,如果 buttonTouched 方法是在您的自定义 tableview 单元子类中实现的,则 self.contentView 应该存在。如果不存在,则该方法不在你的tableView cell子类中,或者它不是UITableView的子类 ooooohhhhhh ..... 呃,当然!好的,在实际的自定义 tableviewcell 类中我这样做。我试图在具有 tableview 的 UIViewController 中执行此操作。太棒了,这很好用。谢谢!

以上是关于iOS:在自定义 UITableViewCell 中更改 contentView backgroundColor on touchDown的主要内容,如果未能解决你的问题,请参考以下文章

在自定义 UITableViewCell 上使用图像时 IOS 8 崩溃

在自定义 UITableViewCell 中调整 UITextView 的大小

在自定义 uitableviewcell 中设置图像会导致延迟

是否可以在自定义 UITableViewCell 中有一个按钮,该按钮引用其中的选择器

我在自定义 UITableViewCell 中以编程方式设置布局约束时遇到问题

在自定义表格视图 ios 中显示按钮