tableviewcell 内的 UIButton 触发单元格而不是按钮 [重复]
Posted
技术标签:
【中文标题】tableviewcell 内的 UIButton 触发单元格而不是按钮 [重复]【英文标题】:UIButton inside tableviewcell triggers cell instead of button [duplicate] 【发布时间】:2018-02-08 16:35:24 【问题描述】:我有一个UITableViewCell
,里面有一个按钮。 (通过 IB 制作)。
现在我想做的是:
-
按下
UITableViewCell
时,我想触发segue
。
按下UIButton
时,我想触发一个动作。
然而,实际发生的是当按下按钮时UITableViewCell
被选中,而不是期望的结果。
有没有办法同时启用这两个操作?
谢谢。
-- 编辑
我希望能够仍然选择表格单元格,并且能够按下按钮。所以禁用选择是行不通的。
-- 根据要求,cellForRowAt:
方法的代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: PersonTableViewCell.identifier, for: indexPath) as! PersonTableViewCell
if ( indexPath.row < (self.searchResult.count))
cell.configure(searchResult[indexPath.row])
return cell
然后,在cell
的配置函数内部,在触发以下函数的按钮上创建一个UITapGestureRecognizer
:
func follow(profile: User)
self.followButton.isSelected = !self.followButton.isSelected
profile.toggleFollow(callback: _ in )
【问题讨论】:
@the4kman 我编辑了这个问题。 【参考方案1】:确保单元格内的按钮遵循以下几点。
-
为您的按钮启用了用户交互
按钮具有适当的框架大小(可点击区域)
一个有效的按钮动作被分配/连接到按钮
按钮是最顶部的视图(没有其他视图覆盖按钮)
显示cellForRow(atIndex...
的代码和表格视图单元格类以获得准确的解决方案。
这里是示例代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomCell
cell.yourbutton.isUserInteractionEnabled = true
cell.yourbutton.addTarget(self, action: #selector(self.buttonTapped(sender:)), for: UIControlEvents.touchUpInside)
//cell.bringSubview(toFront: cell.yourbutton)
//cell.contentView.bringSubview(toFront: cell.yourbutton)
return cell
@objc func buttonTapped(sender: UIButton)
print("button tapped")
编辑:按钮有自己的控制动作/事件处理程序。您可能不需要添加UITapGestureRecognizer
。
【讨论】:
我已经添加了您要求的代码。以上是关于tableviewcell 内的 UIButton 触发单元格而不是按钮 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我在 CollectionViewCell 内有一个 UIButton,它又在 TableViewCell 内。如何通过单击 UIButton 导航到下一个视图控制器?
在 TableViewCell 内单击时 UIButton 标签重置
TableViewCell VoiceOver 辅助功能中的 UIButton
如何在 ios 中使用图案图像在可扩展的 tableViewCell 中设置 UIButton