swift UITapGestureRecognizer 无法处理视图

swift UITapGestureRecognizer not working on view

我不得不创建一个新线程,因为它快把我逼疯了,网上的所有其他答案都完全一样。我已经无数次这样做了,但我看不出我一生中缺少什么。我正在使用“测试”视图控制器只是为了让点击手势工作但它根本不起作用......我相当确定我设置正确,因为这就是我一直在实现它的方式过去:(是的,我选中了 isUserInteractionEnabled 复选框)。我什至在不同的 viewcontroller 上以这种方式实现它并且它正在工作......

class TestViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    view.addGestureRecognizer(tap)
  }

  let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

    
  @objc func wasTapped() {
    print("tapped")
  }
}

我也试过将参数添加到 wasTapped:

@objc func wasTapped(gestureRecognizer: UITapGestureRecognizer) {
  print("tapped")
}

如果您想使用标准 UIView 的手势识别器,您必须启用交互功能

在你的 viewDidLoad.

添加 view.isUserInteractionEnabled = true

尝试这样的事情

override func viewDidLoad() {
    super.viewDidLoad()

     let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped(sender:)))
     tap.numberOfTapsRequired = 1 // Default value
     view.isUserInteractionEnabled = true
     view.addGestureRecognizer(tap)

}

@objc func wasTapped(sender: UITapGestureRecognizer) {
    print("tapped")
}

您是说:

override func viewDidLoad() {
    super.viewDidLoad()

    view.addGestureRecognizer(tap)
}

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

问题是最后一行:

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))

你不能随便说 let tap 那样的。您正在隐式创建一个实例 属性。但是你不能用目标 self 来初始化实例 属性,因为 self 在实例 属性 被初始化时不存在。 (我认为该代码甚至编译为一个错误,并已将其报告为错误。)

将该行移动到 viewDidLoad 的开头,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
    view.addGestureRecognizer(tap)
}
var tapGesture = UITapGestureRecognizer()

查看并设置 IBOutlet 如下:

@IBOutlet weak var viewTap: UIView!     

viewDidLoad() 上编写漂亮的代码,例如:

tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.myviewTapped(_:)))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
viewTap.addGestureRecognizer(tapGesture)
viewTap.isUserInteractionEnabled = true

识别点击手势时调用此方法:

@objc func myviewTapped(_ sender: UITapGestureRecognizer) {
  if self.viewTap.backgroundColor == UIColor.yellow {
    self.viewTap.backgroundColor = UIColor.green
  }else{
    self.viewTap.backgroundColor = UIColor.yellow
  }
}