Swift - 检索子视图

时间:2014-09-28 14:58:53

标签: xcode swift subviews

在我的应用程序中,我正在为视图添加标签,然后我尝试在单击按钮时从视图中清除特定标签,并在尝试检索子视图时遇到错误:

class FirstViewController: UIViewController {

     @IBAction func btnAddTask_Click(sender: UIButton){

          var subViews = self.subviews.copy()

    }
 }

我收到错误:

'FirstViewController'没有名为'subviews'的成员

如何获取当前视图的子视图?

3 个答案:

答案 0 :(得分:12)

UIViewController没有subviews属性。它具有view属性,具有subviews属性:

for subview in self.view.subviews {
   // Manipulate the view
}

但通常这不是一个好主意。您应该将所需的标签放入IBOutletCollection并迭代。否则,你与确切的子视图集(可能会改变)密切相关。

要创建IBOutletCollection,请在IB中选择所需的所有标签,然后将其控制拖动到源代码中。它应该询问您是否要创建一个集合数组。 (请注意,此数组的顺序没有承诺。)

答案 1 :(得分:9)

要查看视图中的所有子视图,您可以使用以下代码:

for subview in self.view.subviews {
   // Use your subview as you want
}

但是为了使用它,你必须确定你需要什么。您可以使用如下特殊标识符标记任何元素,即您创建的内容:

myButton.restorationIdentifier = "mySpecialButton";

之后你可以找到你的元素使用这个结构:

for view in view.subviews {
                if (view.restorationIdentifier == "mySpecialButton") {
                    print("I FIND IT");
                    view.removeFromSuperview();
                }
            }

:)

答案 2 :(得分:0)

古朴典雅:

  1. 获取点击位置。
  2. 使用hitTest检索视图。
  3. 通过accessibilityIdentifier区分视图。

accessibilityIdentifier面向开发人员,旨在用于UI自动化。

雨燕4

@objc func handleTap(_ gestureRecognizer: UITapGestureRecognizer) {
    let positionInView = gestureRecognizer.location(in: view)
    let hitTestView = view?.hitTest(positionInView, with: nil)
    print("hitTestView: \(hitTestView?.accessibilityIdentifier)")
}