我有一个名为UIView
的{{1}}类。在其初始化程序中,我创建了多个SetView
,稍后在subviews
中我想确定哪个ViewController
已被按下。在我的subView
方法中,我遍历所有viewDidLoad
将它们添加到名为subviews
的{{1}}类数组中,并将其添加到我的getIndex方法中,我正在尝试检索值总是检索为零。我认为这是我的主视图,作为发件人而不是特定UIView
传递,但我不知道如何传递特定的mySubViews
,因为#selector不接受参数。如果我能确定哪些subviews
被更新以更新给定subviews
的功能,我将不胜感激。
subview
答案 0 :(得分:3)
发件人应该是手势识别器。然后为您的视图提供标记并为您的手势识别器设置相同的标记。然后,您可以使用viewWithTag
获取视图。
或者使用您的数组,它可能就像
override func viewDidLoad() {
super.viewDidLoad()
var index = 0
for view in setView.subviews {
mySubViews.append(view)
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(getIndex(_:)))
gestureRecognizer.tag = index
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
index += 1
}
}
@objc func getIndex(_ sender: UITapGestureRecognizer) {
print(mySubViews[sender.tag])
}
答案 1 :(得分:1)
目标方法中的发件人是手势识别器。它仅被解释为@resource_type
这一事实将始终在您的通话中返回UIView
。
尝试以下方法:
nil
我还是希望你在超级视图上使用单个手势识别器。然后,您可以通过检查手势识别器是否在视图范围内来检查命中视图:
@objc func getIndex(_ sender: UIGestureRecognizer) {
print(mySubViews.index(of: sender.view))
}
我认为你需要第二个。从中你可以再次找到索引。
答案 2 :(得分:0)
也许尝试这样的事情:
for view in setView.subviews {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(getIndex(_:)))
gestureRecognizer.delegate = self
view.addGestureRecognizer(gestureRecognizer)
mySubViews.addSubview(view)
}
如果您尝试添加,请不要使用追加,并在分配手势后添加。