我正在尝试在UILabel
单元格内的tableView
中添加点击事件,如下所示。
let tap = UITapGestureRecognizer(target: self, action: #selector(downloadFile(_:)))
let msgLabel = cell.viewWithTag(1000) as! UILabel
msgLabel.isUserInteractionEnabled = true
msgLabel.addGestureRecognizer(tap)
这是我的downloadFile
函数。
@objc func downloadFile(_ sender:Any){
print("tapped")
}
谁能为我解决这个问题。
答案 0 :(得分:0)
tap.delegate =self;
tap.numberOfTapsRequired = 1;
将以上代码添加到UITapGestureRecognizer
对象中。这样就可以了:
let tap = UITapGestureRecognizer(target: self, action: #selector(downloadFile(_:)))
tap.delegate =self;
tap.numberOfTapsRequired = 1;
let msgLabel = cell.viewWithTag(1000) as! UILabel
msgLabel.isUserInteractionEnabled = true
msgLabel.addGestureRecognizer(tap)
答案 1 :(得分:0)
我通过子类化UITableViewCell提出了一个替代方案。然后,在自定义TableView单元格内创建downloadFile方法。
请不要忘记在tapGesture目标中用self
替换cell
:
let tap = UITapGestureRecognizer(target: cell, action: #selector(cell.downloadFile(_:)))
我将进一步解释...
第一步:创建自定义单元格
import UIKit
class TableViewCell: UITableViewCell {
@objc func downloadFile() {
print("download")
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
第二步:在tableView数据源(cellForRowAt)中键入UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomTableViewCell
let tap = UITapGestureRecognizer(target: cell, action: #selector(cell.downloadFile(_:)))
答案 2 :(得分:0)
在UITableViewCell子类中创建手势识别器。
class CustomTableViewCell: UITableViewCell{
var exampleLabel: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
func initViews(){
let gesture = UITapGestureRecognizer.init(target: self, action: #selector(labelTapped))
exampleLabel.addGestureRecognizer(gesture)
print(exampleLabel.frame)
}
@objc func labelTapped(){
print("Do something here")
}
}
上面的代码将要求您从情节提要中在UITableView中注册一个CustomTableViewCell类型的单元格。如果您不使用情节提要,请相应地更改代码,并可能将initView方法添加到didMoveToWindow覆盖中。
在您的控制器类中,协议替代应遵循以下类型:
extension HomeController: UITableViewDelegate,UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 30
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SomeIdentifierString", for: indexPath) as! CustomTableViewCell
return cell
}
}
对实际问题不重要,但我想补充一点,如果您不使用情节提要,请添加以下行来注册UITableViewCell子类:
let exampleTable = UITableView.init(frame: self.view.frame, style: .plain)
self.view.addSubview(exampleTable)
exampleTable.register(CustomTableViewCell.self, forCellReuseIdentifier: "SomeIdentifierString")
答案 3 :(得分:0)
使用惰性变量
lazy var label: UILabel = {
let label = UILabel()
label.isUserInteractionEnabled = true
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(downloadFile)))
return label
}()