我有一个视图集合,我希望在点击它们时可以执行相同的命令。而且没有视图执行任何Segue。
class ViewController: UIViewController {
@IBOutlet var categoryViews: [UIView]!
let tapGesture = UIGestureRecognizer(target: self, action: #selector(ViewController.move(tap:)))
override func viewDidLoad() {
super.viewDidLoad()
for category in (0..<categoryViews.count) {
categoryViews[category].addGestureRecognizer(tapGesture)
categoryViews[category].isUserInteractionEnabled = true
}
// Do any additional setup after loading the view.
}
@objc func move(tap: UIGestureRecognizer) {
performSegue(withIdentifier: "Animals", sender: nil)
}
}
答案 0 :(得分:1)
可以将UITapGestureRecognizer
的单个实例添加到单个视图中。
在您的代码中,由于每个视图都使用UITapGestureRecognizer
的单个实例,因此tapGesture
仅添加到view
{ {1}}。
您需要为categoryViews
中的每个array
创建不同的UITapGestureRecognizer
实例,即
view
答案 1 :(得分:0)
问题在于此代码无法实现您认为的目的:
FFHHIIJJ true
UUURROOOR true
HHEEPPDIDI true
LLLQQMQMM true
abaccb true
abc true
d true
true
IIREELO false
PPGIUUUUS false
HRTRDFF false
HIYUDHDA false
abbc false
aabcc false
您的class ViewController: UIViewController {
let tapGesture = UIGestureRecognizer(target: self, action: #selector(ViewController.move(tap:)))
是实例属性声明,等号后是其初始化程序。但是您不能在实例属性初始化程序中谈论let tapGesture
;尚无实例。因此,self
被认为是 class 。因此,您的轻击手势识别器“有效”,但是self
消息没有发送到您的ViewController实例;实际上,它被发送到空白区域。
要解决此问题,您可以在move
存在时初始化tapGesture
。例如:
self