2014-09-28 56 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(); 
       } 
      } 

:)