Swift - 检索子视图

use*_*953 7 xcode subviews swift

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

class FirstViewController: UIViewController {

     @IBAction func btnAddTask_Click(sender: UIButton){

          var subViews = self.subviews.copy()

    }
 }
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

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

Rob*_*ier 12

UIViewController没有subviews财产.它有一个view属性,有一个subviews属性:

for subview in self.view.subviews {
   // Manipulate the view
}
Run Code Online (Sandbox Code Playgroud)

但通常这不是一个好主意.您应该将所需的标签放入IBOutletCollection并重复使用.否则,您与确切的子视图集(可能会发生变化)密切相关.

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


Iva*_*kov 9

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

for subview in self.view.subviews {
   // Use your subview as you want
}
Run Code Online (Sandbox Code Playgroud)

但是为了使用它,您必须确定您需要的视图.您可以使用特殊标识符标记任何元素,您创建的内容,如下所示:

myButton.restorationIdentifier = "mySpecialButton";
Run Code Online (Sandbox Code Playgroud)

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

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

:)