2017-05-24 70 views
0

我有一個簡單的例子。 我連接了左邊的按鈕1和label1並按住Ctrl鍵拖動到控制器類。如何在Swift/MacOS中編程式連接插座和動作

我怎樣才能做到同爲右按鈕2 LABEL2 programaticly(不按Ctrl-draging)

Xcode

That's我的代碼:

class ViewController: NSViewController { 

    @IBOutlet weak var label1: NSTextField! //connected with ctrl-drag 
    @IBOutlet weak var button1: NSButton! //connected with ctrl-drag 

    @IBOutlet weak var label2: NSTextField! //not yet connected 
    @IBOutlet weak var button2: NSButton! //not yet connected 

    @IBAction func button1Pressed(_ sender: Any) //connected with ctrl-drag 
    { label1.stringValue = "button-I" 
    button1.title = "pressed" 
    } 

    @IBAction func button2Pressed(_ sender: Any) //not yet connected 
    { label2.stringValue = "button-II" 
    button2.title = "pressed" 
    } 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    } 
} 
+1

當您在代碼中創建它時,您不需要'IBAction'和'IBOutlet'。而且你不會在代碼中「按住Ctrl鍵」。您編寫實際的代碼來創建控件並分配操作方法。 – rmaddy

+0

我想使用故事板來佈置所有元素,只有連接應該通過編程創建,但這似乎不起作用;-( – mica

+0

你可以編寫代碼訪問故事板,然後訪問控件並將其分配給插座但爲什麼當你可以簡單地連接故事板中的插座時,你爲什麼要這麼做呢? – rmaddy

回答

2

如果你想用故事板並將所有元素佈置在那裏,您無法真正避免ctrl拖動(或者如果打開右側的連接檢查器,只需拖動)。

但是,您可以在代碼中以編程方式創建第二個按鈕,並且完全不使用故事板。然後以編程方式添加您的約束。

如果您願意,也可以通過編程方式添加按鈕的動作(使用addTarget),但至少需要設置IBOutlet才能獲得對按鈕的引用。

+1

如果您有IBOutlet參考到按鈕,你不能仍然使用addTarget()指向你想要的功能?看起來有點無意義,我必須說,看到你要設置IBOutlet,你也可以設置IBAction。 – Spads

+1

絕對是。儘管我相信這個問題避免了IBOutlet和IBAction。我會更新我的答案,包括你的觀點,儘管它是一個有效的觀點。 – Prientus

+0

事實上,我想使用故事板並在那裏佈置所有元素。壞的是沒有辦法以編程方式建立連接。 – mica