2015-06-19 59 views
5

我的控制器中有大約15個UIButton。我試圖用一個簡單的for循環清除其中的10個,看起來像我正在發生某種衝突。在Swift中使用標籤

當我按下按鈕來清除,我得到以下錯誤:

Could not cast value of type '_UISizeTrackingView' (0x18a023c) to 'UIButton' (0x1899298). (lldb)

For循環:

for var i = 0; i < 9; i++ { 
    button = view.viewWithTag(i) as! UIButton 
    button.setImage(nil, forState: .Normal) 
} 

我已經把範圍縮小到一個問題與使用項目標記0.我查看了我的View Controller場景中的所有項目,似乎無法找到任何衝突。我只看到一個按鈕,使用標記= 0

我甚至通過更換confrimed它的「我」與「0」循環,得到了相同的問題。當我使用'1'或'2'代替它時,可以很好地處理單張圖片。

任何辦法,看看有什麼對象正在使用的標籤0?我點擊了他們(包括主視圖),但似乎找不到任何東西。

回答

9

由於存在已經由@ranunez說,默認的標籤是0。我不使用非零標籤的建議達成一致。

我的建議是,根本不使用標籤。如果您想在代碼中使用視圖,請爲其聲明並連接它。如果你想迭代幾個視圖,從你的網點創建一個陣列或使用一系列網點:

@IBOutlet var buttons: [UIButton]! 
+0

偉大的解決方案! – ranunez

+0

作爲一個額外的好處,現在我們可以'通過這些'進入。我不知道Swift,但是在Objective-C中'for in'肯定會比問題中最初的C-style'for'快。 – nhgrif

+0

@Sulthan爲什麼人們使用網點多於標籤?我的意思是它減少了代碼長度!我聽起來不錯,還是通過使用標籤來增加複雜性? –

1

默認情況下,意見具有0的標籤,所以你不應該在這個計數爲0試着給你的按鈕一組不同的標籤的標記刪除您的對象,例如:1000,1001,1002,等代替