我正在创建一个简单的自定义 NSView
,它允许用户分别为 R、G 和 B 值输入 3 个文本字段。我已经引用了这个问答集 here - 它仅适用于 Swift 2.0
。那么,有人知道在 Swift 3.0
中获得相同效果的正确技术吗?我似乎无法得到任何我正在做的工作。我不断收到各种错误。
这是我正在使用的当前技术(这似乎有效......但它不会考虑其他 2 个 RGB
值,因为它用于 @IBAction
):
//viewDidLoad
RVCustomView.wantsLayer = true
@IBAction func redValue(_ sender: AnyObject) {
print(red.stringValue)
var rValue = 0
let str = red.stringValue
if let n = NumberFormatter().number(from: str) {
rValue = Int(CGFloat(n))
}
CustomNSView.layer?.backgroundColor = CGColor(red: rValue, green: 255, blue: 255, alpha: 255)
}
最佳答案
如果您想在每次三个 R、G、B TextView 之一的值发生变化时动态更改 NSView 的背景颜色,您可以使用 controlTextDidChange(notification:)
委托(delegate)NSTextField
的方法与三个文本字段中的每一个的导出相结合。
每次更改其中一个字段时都会触发该方法,您可以使用它来读取 RGB 字段的值(通过 socket )并相应地更改颜色。
override func controlTextDidChange (notification: NSNotification?) {
// assuming the text fields' value is between 0 and 255
guard
let redValue = Float(redOutlet.stringValue),
let greenValue = Float(greenOutlet.stringValue),
let blueValue = Float(blueOutlet.stringValue)
else { return }
CustomNSView.layer?.backgroundColor = CGColor(red: CGFloat(redValue/255), green: CGFloat(greenValue/255), blue: CGFloat(blueValue/255), alpha: 255)
}
注意:不要忘记为三个文本字段中的每一个正确设置委托(delegate)!
关于swift - 改变 NSView 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314500/