2017-06-03 45 views
0

我有一個nstableview自定義單元格。 (4行,每行一個文本框)從nstableview中的文本字段獲取字符串值

我有一個NSTableView的控制器和一個自定義的細胞類 到NSTableView的類別i的推杆此委託梅索德:

func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool { 

    print("Edit") 
    return true 
} 

當我改變一個的NSTextField值我nstableview我得到一個「編輯」打印。但現在我必須知道,編輯後的文本字段的新值是什麼。

我怎麼能得到這個?

迅速3,OSX

回答

0

您可以使用:

func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool { 
    print("new text is \(fieldEditor.string!) 
    return true 
} 

你會發現在該委託方法的fieldEditor參數的新文本。

現在你在你的NSTableView類中有這個委託方法。我建議將它移動到您的自定義單元類並重置您的委託以指向自定義單元格。

然後,如果您將四個文本字段中的每個文本字段分配到@IBOutlet屬性,則可以很容易地看到它屬於哪個字段。那就是:

class MyCustomTableViewCell : NSTableViewCell, NSControlTextEditingDelegate { 

    @IBOutlet weak var nameField : NSTextField! 
    @IBOutlet weak var categoryField : NSTextField! 
    @IBOutlet weak var anotherTextField : NSTextField! 
    @IBOutlet weak var andYetAnotherTextField : NSTextField! 

    func control(_ control: NSControl, textShouldEndEditing fieldEditor: NSText) -> Bool { 

     if control == self.nameField { 
       print("new nameField text is is \(fieldEditor.string!) 
     } 
     if control == self.categoryField { 
       print("new categoryField text is is \(fieldEditor.string!) 
     } 
     if control == self.anotherTextField { 
       print("new anotherTextField text is is \(fieldEditor.string!) 
     } 
     if control == self.andYetAnotherTextField { 
       print("new andYetAnotherTextField text is is \(fieldEditor.string!) 
     } 
    return true 
} 

認爲這也將有switch聲明(例如switch(control)case self.nameField)工作。

+0

感謝這個很好的解決方案:)但我怎麼知道這個值是哪個文本字段? – Ghost108

+0

我編輯過,顯示如何使用委託方法的'control'參數。 –

+0

非常感謝你:) – Ghost108