2017年09月17日
https://blog.csdn.net/lovechris00/article/details/78007786
简介
创建和使用
尺寸
常见的递增输入,其实是一个 NSTextField 和 NSStepper 组合使用:
简介
stepper 是一个很简单的控件,以至于定义只有这么多:
创建和使用
- (void)addStepper{
NSStepper *stepper = [[NSStepper alloc] initWithFrame:NSMakeRect(100, 100, 100, 100)];
[self.window.contentView addSubview:stepper];
stepper.wantsLayer = YES;
stepper.layer.backgroundColor = [NSColor cyanColor].CGColor;
stepper.minValue = 5;
stepper.maxValue = 10;
stepper.increment = 0.2; //步增值
stepper.valueWraps = NO; //循环,YES - 超过最小值,回到最大值;超过最大值,来到最小值。
stepper.continuous = NO; //默认为YES-用户交互时会立即放松ValueChanged事件,NO 则表示只有等用户交互结束时才放松ValueChanged事件
stepper.autorepeat = YES; //默认为 YES-按住加号或减号不松手,数字会持续变化.continuous = NO 时才有意义。
[stepper setAction:@selector(stepperAction:)];
}
- (void)stepperAction:(id)sender
{
int theValue = [sender intValue];
float fValue = [sender floatValue];
NSLog(@"value : %d , %f",theValue,fValue);
[self.pageSizeTextField setIntValue:theValue];
}
尺寸
如你所见,无论给他设置frame多大,都只显示这么大。
需要大尺寸的 Stepper 的童鞋,可以用两个 button 来自定义。
---------------------
原文:https://blog.csdn.net/lovechris00/article/details/78007786
NSStepper & NSTextField Bindings
2017.04.21 18:01* 字数 252 阅读 156评论 0喜欢 0
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