4

我有我的當前iPhone應用程序的頂部列表視圖,這是由代碼填充。我使用Interface Builder組裝了視圖,因此它包含很多UILabel s。是否可以使用類似IBOutlet數組的東西?

很顯然,我不希望在我的課name1name2等網點,但更喜歡name[10]陣列。

是否有可能這樣做,並將每個項目連接到適當的標籤(或任何其他接口生成器,如視圖)?

回答

0

你不能在IB中完成它,但是你可以在你的init方法中創建一個數組並將所有標籤添加到它。

順便說一句,您可以爲每個標籤設置一些標籤並定義宏來訪問它。水木清華像

#define NAME[TAG] (UILabel*)[self.view viewWithTag:TAG] 
22

你當然可以使用界面製作工具,關鍵字是IBOutletCollection。它所做的基本上是一個NSArray,它是由多個接口構建器插座組成的。

IBOutletCollection(UILabel) NSArray *myLabels; 

所以接下來的事情將在Interface Builder來連接您的標籤,然後你可以使用數組在運行時可以訪問所有的標籤。

+0

這必須是在界面生成器和Xcode中的一項新功能,是不是? – shinjin 2011-01-13 12:06:58

+0

@Shinjin:當這個功能可用時,我無法給你確切的日期或發佈,但我知道它現在有一段時間了(至少一歲)。 – JustSid 2011-01-13 12:43:06

+0

我在其他地方看過這是從iOS 4開始添加的。但是,您不能依賴IBOutlets的順序(或者不能;不確定它是否已被iOS 8修復)。 – ultrageek 2015-04-20 08:57:00

0

按照以下步驟來創建出口數組的它與IB元素連接(這裏是舉例UIView,您可以使用UILabel也):

  • 創建一個數組IBOutlets的
  • 添加多個UI元素(視圖)
  • 選擇ViewController(在故事板)並打開連接檢查器
  • 在連接檢查器中有選項'出口集合'(您會看到一個數組網點有)
  • 連接,如果你的界面元素

-

class ViewController2: UIViewController { 


    @IBOutlet var collection:[UIView]! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
} 

enter image description here

相關問題