NSStepper & NSTextField Bindings

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?, errorDescription error: AutoreleasingUnsafeMutablePointer?) -> Bool {
            if partialString.isEmpty {
                return true
            }
            return Int(partialString) != nil
        }
    }

viewDidLoad() 中赋给 textField

textField.formatter = stepperNumberFormatter()

GitHub

参考 YOUTUBE

你可能感兴趣的:(NSStepper & NSTextField Bindings)