我在tableviewcell中有一个按钮。我想分别捕获按钮单击事件和单元格单击事件。单击该按钮时,将导致按钮单击事件。单击单元格的其他部分时,将导致单元格单击事件。
当问题是我点击按钮时,按钮点击事件share
未执行,但是已执行单元格选择事件。
import UIKit
class ArticleTableViewCell: UITableViewCell {
@IBOutlet weak var time: UILabel!
@IBOutlet weak var digest: UILabel!
@IBOutlet weak var share: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func share(_ sender: Any) {
print("share")
}
}
答案 0 :(得分:1)
您可以使用delegate
方法didSelectRowAtIndexPath
获取整个单元格的点击事件。您必须将表视图的委托设置为文件的所有者(Controller)。
为了获得按钮的click事件,我总是进行以下解决方法。将标记添加到按钮indexpath.row
。将目标添加到按钮。在选择器功能中,您可以使用sender.tag
获取单击的单元格按钮。
答案 1 :(得分:1)
我原以为这个问题是由图层序列引起的。然后在@AndreaMugnaini,@ FahriAzimov,@MilanNosáľ的帮助下,我知道层序不是问题。
然后我认为它可能是由布局引起的。所以我检查了约束,我发现有一个额外的约束。我删除了8.5约束,效果很好。
答案 2 :(得分:1)
单击单元格didSelectRowAt
时会调用。
对于Button事件,您需要在ArticleTableViewCell
课程中创建自定义委托方法。如下所示:
import UIKit
protocol ButtonDelegateCell {
func shareButtonDidPressed()
}
class ArticleTableViewCell: UITableViewCell {
@IBOutlet weak var time: UILabel!
@IBOutlet weak var digest: UILabel!
@IBOutlet weak var share: UIButton!
var delegate: ButtonDelegateCell?
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func share(_ sender: Any) {
delegate?.shareButtonDidPressed()
print("share")
}
}
现在,在didSelectRowAt
设置您的委托如下:
cell.delegate = self
然后在下面的ViewController行中实现您的委托方法:
func didButtonPressed() {
// When you click on Share button this method will called
}
答案 3 :(得分:1)
首先在控制器中添加要使用单元格的委托和数据源。
class viewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
// if you want use xib in tableview then open it and add your xib name to replace - ArticleTableViewCell
//tableView.register(UINib(nibName: "ArticleTableViewCell", bundle: nil), forCellReuseIdentifier: "ArticleTableViewCell")
}
func btn_Handler_Share(sender:UIButton) {
let selectedIndexpath = sender.tag
print(selectedIndexpath)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:ArticleTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ArticleTableViewCell") as! ArticleTableViewCell
cell.share.tag = indexPath.row
cell.share.addTarget(self,action:#selector(btn_Handler_Share(sender:)), for: .touchUpInside)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath.row)
}
}
如果存在,则将共享按钮的操作删除到ArticleTableViewCell(UITableViewCell)中。