2014-09-28 57 views
6

在我的应用我添加标签的观点,然后我试图点击一个按钮时从视图中清除特定的标签,并试图获取子视图时,我遇到了一个错误:斯威夫特 - 检索子视图

class FirstViewController: UIViewController { 

    @IBAction func btnAddTask_Click(sender: UIButton){ 

      var subViews = self.subviews.copy() 

    } 
} 

我得到的错误:

“FirstViewController”没有一个名为成员“子视图”

我怎样才能得到当前视图的子视图?

+1

'自我。 view.subviews'? – 2014-09-28 15:00:07

+0

我试过这个,并得到这个错误:'[AnyObject]'没有名为'copy'的成员 – user2961953 2014-09-28 15:02:02

+0

数组总是在Swift中复制。 – 2014-09-28 15:03:09

回答

11

UIViewController没有subviews属性。它有一个view财产,其中有一个subviews属性:

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

但通常情况下,这不是一个好主意。你应该把你想要的标签放入IBOutletCollection并重复。否则,你已经与一系列子视图(可能会改变)紧密相关。

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

+0

谢谢。这确实有用。我会看看你使用IBOutletCollection的建议 – user2961953 2014-09-28 15:08:50

+0

我正在动态创建标签,所以我需要弄清楚如何从源代码中将标签添加到集合中。再次感谢 – user2961953 2014-09-28 15:44:08

+0

只需在创建它们时将它们放入数组属性中即可。 – 2014-09-28 16:51:58

4

为了找到您的视图中的所有子视图您可以使用此代码:

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(); 
       } 
      } 

:)