如何识别在Swift中按下哪个子视图?

时间:2018-06-14 11:22:46

标签: ios swift

我有一个名为UIView的{​​{1}}类。在其初始化程序中,我创建了多个SetView,稍后在subviews中我想确定哪个ViewController已被按下。在我的subView方法中,我遍历所有viewDidLoad将它们添加到名为subviews的{​​{1}}类数组中,并将其添加到我的getIndex方法中,我正在尝试检索值总是检索为零。我认为这是我的主视图,作为发件人而不是特定UIView传递,但我不知道如何传递特定的mySubViews,因为#selector不接受参数。如果我能确定哪些subviews被更新以更新给定subviews的功能,我将不胜感激。

subview

3 个答案:

答案 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)
}

如果您尝试添加,请不要使用追加,并在分配手势后添加。