Cocoa 开发中更多地运用对象绑定的概念。这是一个 NSStepper 和 NSTextField 绑定的例子。
Model
创建 StepperModel.swift,视图组件的 model key path 将引用 model 中定义的变量名。
class StepperModel: NSObject {
var stepperValue: Int = 0
}
ObjectController
创建 StepperContrller.swift,两个视图组建将绑定这个 Controller。
Bindings
1. ObjectController 绑定 Object
- MainStoryboard 中拖入 Object 和 ObjectController 两个对象。
- Identity Inspector 中设置它们的父类分别为 StepperModel 和 StepperController
- 选择 ObjectController,Bindings Inspector 中,Controller Content > Bind to Stepper Model, Model Key Path 默认为 self
2. 视图组件绑定 Controller
- MainStoryboard 中拖入 Stepper 和 TextField 组件。
- Bindings Inspector 中,Stepper > Value > Bind to > Stepper Controller, Model Key Path 设为 stepperValue,与 model 中定义的变量名一致
- TextField 做同样绑定,这样两个组件通过 ObjectController 绑定到同一个值上。
格式化
通常 NumberFormatter 也可以在 Inspector 中设置,但是整型格式需要自己定义,避免输入非整型数据。
class stepperNumberFormatter: NumberFormatter {
override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
if partialString.isEmpty {
return true
}
return Int(partialString) != nil
}
}
viewDidLoad() 中赋给 textField
textField.formatter = stepperNumberFormatter()
参考 YOUTUBE