【发布时间】:2018-06-14 21:22:45
【问题描述】:
我建立了一个名为SetView 的UIView 类。在其初始化程序中,我创建了多个subviews,然后在ViewController 中创建了多个subView,我想确定哪个subView 被按下。在我的viewDidLoad 方法中,我遍历所有subviews 将它们添加到UIView 的类数组中,称为mySubViews,它是我的getIndex 方法,我试图检索始终检索为nil 的值。我想我的主要观点是作为发件人而不是特定的subviews 传递,但我不知道如何传递特定的subviews,因为#selector 不接受参数。对于如何确定按下哪个subview 来更新给定subview 的功能的任何建议,我将不胜感激。
override func viewDidLoad() {
super.viewDidLoad()
for view in setView.subviews {
mySubViews.append(view)
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(getIndex(_:)))
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
}
}
@objc func getIndex(_ sender:UIView) {
print(mySubViews.index(of: sender))
}
【问题讨论】:
-
您不需要为每个子视图添加手势,只在主视图中添加手势。并且从点击手势发送器中,您可以获取点击了哪个视图。
-
@iPeter 我应该使用点击手势的什么属性来检索按下了哪个点击手势发送者?我查看了哈希值,实际上它们对于单击的不同子视图是不同的。但是,它们会随着应用程序的每次编译而变化,因此我无法使用它们来识别特定的子视图
-
你可以试试
getIndex(_ sender:UIGestureRecognizer) { print(mySubViews.index(of: sender.view)) -
仅使用 一个 点按手势。并且从
sender.view,你可以得到被点击的视图。