如何在ios swift的tableview中为uilabel添加滑动手势?

时间:2018-04-17 04:59:18

标签: ios swift xcode uitableview uiswipegesturerecognizer

我正在尝试在表格视图中创建检查列表。在桌面视图单选按钮和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))

    }
   }

3 个答案:

答案 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")
  }

查看输出 enter image description here

附加:如果您想要检测哪个行的标签被点击,请将标签分配给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。 此外,如果要拖动标签,请使用平移手势