如何在 ios swift 的 tableview 中为 uilabel 添加滑动手势?
How to add swipe gesture for uilabel inside tableview in ios swift?
我正在尝试在 table 视图中创建清单。在 table 查看单选按钮和 UILabel 中,这里为 UILabel 添加滑动手势。单次滑动 UILabel 将显示单选按钮或双次滑动 UILabel 将显示虚线。
我尝试通过使用选择器方法向 table 中的 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))
}
}
我注意到的第一件事是您在 UITableView
而不是 UILabel
上添加手势。 所以你需要先解决这个问题。
其次,要使手势在控件上正常工作,您必须启用该控件 的用户交互属性,否则它不会响应手势。所以:
label.isUserInteractionEnabled = true
您可以按如下方式添加手势:
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swipedToLeft))
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
label.addGestureRecognizer(swipeLeft)
试试这个代码。测试并工作正常 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)")
我建议在单元格 class 中添加滑动手势,而不是 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) {
}
在 awakeFromNib
中调用 setupGestures
。
另外如果你想拖动标签,使用平移手势
我正在尝试在 table 视图中创建清单。在 table 查看单选按钮和 UILabel 中,这里为 UILabel 添加滑动手势。单次滑动 UILabel 将显示单选按钮或双次滑动 UILabel 将显示虚线。
我尝试通过使用选择器方法向 table 中的 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))
}
}
我注意到的第一件事是您在 UITableView
而不是 UILabel
上添加手势。 所以你需要先解决这个问题。
其次,要使手势在控件上正常工作,您必须启用该控件 的用户交互属性,否则它不会响应手势。所以:
label.isUserInteractionEnabled = true
您可以按如下方式添加手势:
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swipedToLeft))
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
label.addGestureRecognizer(swipeLeft)
试试这个代码。测试并工作正常 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)")
我建议在单元格 class 中添加滑动手势,而不是 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) {
}
在 awakeFromNib
中调用 setupGestures
。
另外如果你想拖动标签,使用平移手势