我想要做的是处理触摸事件,这样当我的屏幕被触摸时,我想采取一些行动。例如更改背景颜色我尝试过的事情://我将表视图控制器子类化
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
tableView.backgroundColor = UIColor.orangeColor()
}
那没有用,我怀疑 tvc 可能不是第一响应者,因此表格视图处理触摸事件。所以我尝试了:
override func viewDidLoad() {
super.viewDidLoad()
tableView.resignFirstResponder()
}
也试过:
override func becomeFirstResponder() -> Bool {
return true
}
override func canBecomeFirstResponder() -> Bool {
return true
}
它们都不起作用。我该如何处理事件?我错过了什么?
编辑
根据本机 swift 代码选择的答案:
override func viewDidLoad() {
super.viewDidLoad()
var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tap:")
tapGestureRecognizer.cancelsTouchesInView = true
self.tableView.addGestureRecognizer(tapGestureRecognizer)
}
func tap(recognizer: UITapGestureRecognizer) {
if recognizer.state == UIGestureRecognizerState.Ended {
var tapLocation = recognizer.locationInView(self.tableView)
var tapIndexPath : NSIndexPath? = self.tableView.indexPathForRowAtPoint(tapLocation)
if let index = tapIndexPath {
self.tableView(self.tableView, didSelectRowAtIndexPath: index)
} else {
self.tableView.backgroundColor = UIColor.orangeColor()
}
}
}