我正在尝试在表格视图中创建检查列表。在桌面视图单选按钮和UILabel中,这里向UILabel添加滑动手势。对于UILabel的单击,将显示单选按钮或UILabel的双击将显示虚线。
我尝试使用选择器方法向表内的UILabel添加手势,它打印成功但UILabel没有滑动。
以下是试用UILabel的代码:
在viewDidLoad中:
let gestureRec = UISwipeGestureRecognizer(target: self, action: #selector(didTap(sender:)))
tableView.addGestureRecognizer(gestureRec)
gestureRec.delegate = self as? UIGestureRecognizerDelegate
创建了名为didTap的函数:
@objc func didTap(sender : UISwipeGestureRecognizer)
{
if sender.state == .ended {
let location = sender.location(in: self.tableView)
let indexPath = self.tableView.indexPathForRow(at: location)
var cell = self.tableView.cellForRow(at: indexPath!) as! textCell
print("swipe")
cell.labelView.frame(forAlignmentRect: CGRect(x: 10, y: 8, width: 20,
height: 15))
}
}
答案 0 :(得分:3)
试试这段代码。经过测试并且工作正常100%
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = tableDataSource[indexPath.row]
cell.textLabel?.isUserInteractionEnabled = true
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.labelSwipedLeft(sender:)))
cell.textLabel?.addGestureRecognizer(swipeLeft)
return cell
@objc func labelSwipedLeft(sender: UITapGestureRecognizer) {
print("labelSwipedLeft called")
}
附加:如果您想要检测哪个行的标签被点击,请将标签分配给cellForRowAt中的标签,如
cell.textLabel?.tag = indexPath.row
使用
获取 labelSwipedLeft 函数中的行索引print("labelSwipedLeft called for row \(sender.view!.tag)")
答案 1 :(得分:2)
我注意到的第一件事是您在UITableView
而不是UILabel
添加了手势。 所以你需要先修复它。
其次,要使手势在控件上正常工作,必须启用该控件的用户交互属性,否则它不会对手势做出响应。所以:
label.isUserInteractionEnabled = true
您可以按如下方式添加手势:
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swipedToLeft))
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
label.addGestureRecognizer(swipeLeft)
答案 2 :(得分:1)
我建议在单元格类中添加滑动手势,而不是ViewController
。
func setupGestures() {
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleLeftSwipe(_:)))
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
label.addGestureRecognizer(swipeLeft)
label.isUserInteractionEnabled = true
}
@objc func handleLeftSwipe(_ recognizer: UISwipeGestureRecognizer) {
}
在setupGestures
中致电awakeFromNib
。
此外,如果要拖动标签,请使用平移手势