更改后的Swift NSTextfield变量

时间:2017-05-29 07:11:55

标签: swift macos nstextfield

如何编写它以便在用户完成使用字段时更新变量(对于Cocoa?)。目的是允许用户为网络上的电视位置指定自定义IP地址。

import Cocoa
import Alamofire

class ViewController: NSViewController, NSTextFieldDelegate {

@IBAction func MenuButton(_ sender: NSButtonCell) {
    triggerRemoteControl(irccc: "AAAAAQAAAAEAAABgAw==")
}
@IBAction func ReturnButton(_ sender: NSButton) {
    triggerRemoteControl(irccc: "AAAAAgAAAJcAAAAjAw==")
}

...

@IBOutlet var IPField: NSTextField!  // [A] Set by the user

...

func triggerRemoteControl(irccc: String) {
    Alamofire.request(IPField,     // [B] Goes here when it's updated.
                      method: .post,
                      parameters: ["parameter" : "value"],
                      encoding: SOAPEncoding(service: "urn:schemas-sony-com:service:IRCC:1",
                                             action: "X_SendIRCC", IRCCC: irccc)).responseString { response in
                                                print(response)
    }
}


}

- 更新

我尝试声明一个变量:

var IPString: String

然后(我将textField的委托设置为ViewController,并将此函数放在其中):

override func controlTextDidEndEditing(_ obj: Notification){
    let IPString = IPField.stringValue
}

即使使用" - >字符串"并且返回符号仍然抱怨未使用的变量。我显然不太了解我的语法。

编译器还抱怨ViewController没有被初始化。

1 个答案:

答案 0 :(得分:1)

您需要覆盖func controlTextDidEndEditing(_ obj: Notification)功能

你应该看看:

  • objectobj的属性) - 有时您想知道哪个对象向您发送了结束编辑操作。

  • userInfoobj的属性) - 包含"NSTextMovement"键,可让您定义用户结束编辑的方式。

override func controlTextDidEndEditing(_ obj: Notification){ let IPString = IPField.stringValue }

在这里,你要创造新的常数。你想要的是将这个值设置为你的类变量,所以你应该IPString = IPField.stringValue

但它不太正确,因为func controlTextDidEndEditing(_ obj: Notification)可以从其他对象调用,所以首先应该检查obj通知是否包含以警卫发送的对象。例如。 / p>

guard let object = obj.object else { return }

然后检查对象是否是带有标识运算符的IPField

guard object === IPField else { return }

最后,您可以将字段值分配给IPString var

IPString = object.stringValue

希望它会对你有所帮助。哦,我的一个建议,你应该为你的变量使用较低的驼峰案例命名约定。