我在Interface Builder的一個視圖中有30個按鈕。每個人在100001和100030之間都有一個不同的標籤。我發現很容易對每個按鈕使用相同的動作,在按下時爲每個按鈕傳遞標籤,並使用代碼決定要裝入的級別。我可以使用不同標籤將多個對象連接到同一個IBOutlet嗎?
我想將所有按鈕連接到一個IBOutlet,但每個按鈕都會根據用戶保存的數據和按鈕的標籤加載不同的圖像。
我該怎麼做?
我在Interface Builder的一個視圖中有30個按鈕。每個人在100001和100030之間都有一個不同的標籤。我發現很容易對每個按鈕使用相同的動作,在按下時爲每個按鈕傳遞標籤,並使用代碼決定要裝入的級別。我可以使用不同標籤將多個對象連接到同一個IBOutlet嗎?
我想將所有按鈕連接到一個IBOutlet,但每個按鈕都會根據用戶保存的數據和按鈕的標籤加載不同的圖像。
我該怎麼做?
使用IBOutletCollection的插座集合添加到您的視圖控制器,這樣的:
@property (retain, nonatomic) IBOutletCollection(UIButton) NSMutableSet* buttons;
這將讓你所有的按鈕連接到一個出口。屬性buttons
將是一個包含所有按鈕的NSMutableSet。您可以使用按鈕的tag
屬性繼續識別單個按鈕。如果你想通過所有的按鈕迭代,也許是爲了建立每個按鈕的形象這是非常方便:
for (UIButton *b in self.buttons) {
b.imageView.image = [self imageForTag:b.tag];
}
(您需要提供-imageForTag:
方法對於給定的標籤提供正確的圖像,或者找當然,如果您已經知道所有按鈕的標籤值的範圍,並且您已經注意在包含所有按鈕的視圖中使標籤獨一無二的話,按鈕,您也可以使用-viewWithTag:
單獨獲取每個按鈕。這可能不像已經創建的整組按鈕那樣快,就像你在上面描述的outlet集合中那樣,但這確實意味着還有一件事要維護。
按照以下步驟來創建出口數組的它與IB元素連接:
-
class ViewController2: UIViewController {
@IBOutlet var collection:[UIView]!
override func viewDidLoad() {
super.viewDidLoad()
}
}
是的,當場!我剛剛嘗試過這一點,NSLog'ed了數組的數量,並完美地連接按鈕......唯一的這個我不知道該怎麼做,然後用它來改變這個按鈕圖像?我該怎麼做明智的代碼?謝謝! – 2011-12-19 16:55:22
使用IBOutletCollection設置按鈕的圖像與使用普通的舊IBOutlet沒有什麼不同,只是首先必須從集合中獲取每個按鈕。我在上面添加了一個小片段,可能有所幫助。 – Caleb 2011-12-19 17:03:14
謝謝你現在工作得很好! :d – 2011-12-19 17:11:24