[英]Update Swift NSTextfield variable when it's changed
我该如何编写代码,以便在用户完成使用字段时(对于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没有初始化。
您需要重写func controlTextDidEndEditing(_ obj:Notification)函数
您应该看一下:
userInfo ( obj的属性)-包含"NSTextMovement"
键,该键可让您定义用户如何结束编辑。
override func controlTextDidEndEditing(_ obj: Notification){ let IPString = IPField.stringValue }
在这里,您正在创建新的常量。 您想要的是将此值设置为类变量,因此您应该使IPString = IPField.stringValue
但这不是很正确,因为可以从其他对象调用func controlTextDidEndEditing(_ obj: Notification)
,因此首先应检查obj
通知是否包含带有警戒的对象。
guard let object = obj.object else { return }
然后检查对象是否是您的带有身份运算符的IPField
guard object === IPField else { return }
最后,您可以将字段值分配给IPString
var
IPString = object.stringValue
希望对您有帮助。 哦,还有我的一个建议,您应该为变量使用小写驼峰命名约定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.