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