2017-09-27 74 views
0

我有一個OS X應用程序中有50個複選框(NSButton)的視圖。我需要訪問代碼中的每一個,但我發現的唯一方法是創建50個IBOutlet綁定。 IBOutlet集合在OS X中不可用,我該怎麼辦?訪問控制器視圖中的複選框(NSButton)

+0

使用for循環。 –

+0

但是有沒有50 IBOutlets的方式? – mlexposito

+0

這是您需要通過循環以編程方式創建複選框的完美案例。 – brianLikeApple

回答

0

ViewController類(我假設您使用視圖控制器)中引用50個複選框的一種方法是首先檢索包含50個複選框中的每一個的超級視圖。這將是一個NSView對象。爲了區分複選框,我建議在界面構建器中正確設置不同的標記值,但這取決於您想要對複選框執行什麼操作。然後,可以使用一個循環通過每個子視圖的在此視圖中進行迭代,像這樣:

for i in view.subviews.filter({$0 as? NSButton != nil}).map({$0 as! NSButton}) { 
    if i.bezelStyle == .regularSquare && !(i.cell as! NSButtonCell).imageDimsWhenDisabled { 
     print(i.title) 
    } 
} 

if條件基本上利用複選框的兩個屬性,從任何其他類型的NSButton區分它們。

在這個例子中,我只是簡單地打印每個複選框的標題。如果要執行不同的任務,則可以使用switch語句,具體取決於它是哪個複選框。好的是,用這種方法你可以有無限多的複選框。迭代順序從左到右,從上到下。