2010-09-03 95 views
5

如何查看IBOutletCollection的實際用法?不幸的是,Apple文檔沒有提供更廣泛的用法思路,而是簡要提及它。好吧,它保持與IB的一對多關係,但是如何有效地訪問和使用特定對象?使用TagName?如何確保對象的順序?實際使用IBOutletColletion

回答

5

我最近使用它來輕鬆初始化標籤網格。我在視圖上有一個n×n的標籤矩陣,並單獨引用每一個(通過IBOutlet)以顯示相關數據。然而,當視圖第一次加載時,我想控制所有標籤中顯示的默認文本。最初我想要一個短跑顯示,但由於這是一個客戶,我希望它很容易改變。視圖內容隨着時間的推移而不斷變化,並且每個客戶端請求都會不斷變化

我創建了一個IBOutletCollection,並在4(@property,@synthesize和for循環)中完成了相同的結果,而不是編寫N行代碼。 YMMV,但我發現它在這種情況下非常有用。

0

在Interface Builder User Guide中再次閱讀this section

IBOutletCollection s實際上只是NSArray s您可以連接到IB中的多個對象。你連接的所有對象最終都在這個數組中,並且可以像代碼中的任何其他對象一樣從代碼中訪問。

+0

:)現在,怎麼看起來實際使用?你說過,我可以像任何其他數組中的任何其他對象一樣訪問每個對象。確實,但是這個數組是如何排序的?我應該在開始時自行排序嗎?以及如何區分這個數組中的對象?有標籤?如果是這樣,我應該遍歷整個數組來尋找我正在尋找的對象,或者最好用謂詞搜索數組?等等...... – juckobee 2010-09-05 11:05:10

+1

如果你正在尋找特定的物體,你可能不應該使用這個。如果您想要遍歷元素列表,請使用它。如果你需要區分它們,你可以使用'tag'屬性,或者'target'和/或'action'。 – Sven 2010-09-05 11:17:16

+1

不幸的是,在運行時不會保留添加項目到集合的順序。 – zubko 2011-04-30 11:34:16

0

我用它來最小化代碼。我有一系列的UIViews應該對一些UIButtons(自定義模式)的「觸及內部」事件做出反應。

我給所有的UIButtons一個標籤(可以說1005到1010),並且所有的UIViews都與它們應該響應的UIButton具有相同的標籤。

然後我將UIViews與Interface Builder中的集合連接起來。所有UIButton觸摸事件都轉到我的控制器中的相同功能。這個函數獲取sender對象的標籤,遍歷NSArray列表(「IBOutletCollection(UIView)」)並比較標籤。每次它命中,適當的行動就完成了。

這是一個遺憾,NSArrays似乎無法保存訂單......這到底是什麼蘋果的文檔中描述