从 nstableview 中的文本字段获取字符串值

get string value from textfield in nstableview

我有一个带有自定义单元格的 nstableview。 (4 行,每行一个文本字段)

我有一个 nstableview 控制器和一个自定义单元 class 进入 nstableview class 我把这个委托方法:

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

   print("Edit") 
   return true
}

当我在我的 nstableview 中更改 nstextfield 值时,我得到一个 "Edit" 打印。但现在我必须知道,编辑文本字段的新值是多少。

我怎样才能得到这个?

swift3、osx

您可以使用:

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

您将在该委托方法的 fieldEditor 参数中找到新文本。

现在你的 NSTableView 中有这个委托方法 class。我建议将其移动到您的自定义单元格 class 并重置您的委托以指向自定义单元格。

然后,如果您将四个文本字段中的每一个分配给 @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)。