2015-02-17 40 views
0

有兩個插座連接到我的ViewController.swift文件。如何在鍵入時立即更改NSTextField的值?

@IBOutlet var myOutlet: NSTextField! 
@IBOutlet var yourOutlet: NSTextField! 

還有一個動作連接。

@IBAction func myAction(sender: NSTextField) { 
    self.yourOutlet.doubleValue = myOutlet.doubleValue - 10 

當我運行該應用程序,它的工作原理。 我輸入15到myOutlet連接的文本字段,然後按回車。和yourOutlet連接的字段取值爲5.

如果沒有輸入按鈕,那就更好了。那麼,如何在我們輸入時立即改變價值?

感謝您的答案。

回答

1

我沒有機會做swift和OSX開發,但我可以帶領您找到解決方案。

看看textDidChange(_:)

帖子的通知,該文本已更改,並轉發該 消息接收器的電池它是否響應。

宣言

func textDidChange(_ aNotification: NSNotification) 參數aNotification被髮布到默認的通知中心的NSControlTextDidChangeNotification 通知。 討論此方法會導致接收方的代理接收控制文本消息ChangeTextDidChange: 。有關文本委託方法的更多信息,請參閱NSControl類規範 。

因此,要實現自己的目標,你會實現這個委託,它將獲得每次編輯的文本NSTextField。那麼內部的委託塊將爲你提供所需的邏輯裏面時調用。

+0

感謝您的好回答。但因爲我是初學者,無法想出使用這種方法。 當我使用僅'@IBAction FUNC brutAct(發件人:的NSTextField){ 如果NSControlTextDidChangeNotification == TRUE { self.kdvOut.doubleValue = brutOut.doubleValue + 1.0 }' 它不起作用。 如果我創建這樣的方法,並嘗試使用: 'FUNC textDidChange(myNotification:NSNotification){ NSControlTextDidChangeNotification == TRUE' 什麼也沒有發生任何:( – defendus 2015-02-17 21:28:30

+0

其實,這是一個文本*查看委託*。由於text * field *是一個控件,因此它會向其代理髮送'controlTextDidChange(_ :)'。 – 2015-02-17 21:29:37

+0

要使用委託方法,首先將文本字段的'delegate'出口連接到控制器。將'NSControlTextDidChangeNotification'與'true'比較,你可以將'myNotification.name'與'NSControlTextDidChangeNotification'比較,但沒必要,因爲該方法只能被調用,只需要做一些類似'func controlTextDidChange(myNotification:NSNotification) {self.kdvOut.do ubleValue = brutOut.doubleValue + 1.0}'。 – 2015-02-17 21:34:27

相關問題