我正在使用NSStepper
和NSTextField
。用户可以使用文本字段设置值,也可以使用NSStepper更改值。我将使用以下示例引用我的问题:
假设我的步进器的当前值是4并且步进器的增量值是2:
单击NSStepper上的向上箭头后,该值变为:
现在假设当前值为4.5,即
使用向上箭头后,该值变为:
我要求的是当当前值为4.5时,在使用向上箭头后,该值变为 6 而不是6.5
非常感谢任何实现这一目标的想法!
答案 0 :(得分:1)
我需要的是当当前值为4.5时,使用后 向上箭头,该值变为6而不是6.5
很难确切地说出你在问什么但是猜测:听起来你想要删除数字的小数部分并按你定义的步数增加(2)。您可以通过floor()
功能执行此操作。 See here for other Objective-C math functions
double floor(double) - 删除参数的小数部分
NSLog(@"res: %.f", floor(3.000000000001));
//result 3
NSLog(@"res:%.f", floor(3.9999999));
//result 3
答案 1 :(得分:0)
如果我理解你想要的东西,这段代码会给你下一个偶数(根据你点击的箭头向上或向下),但仍允许你在文本字段中输入非整数。 tf和stepper是IBOutlets,num是一个属性(浮点数),用于在单击箭头之前跟踪步进器的值,以便您可以与新数字进行比较,以查看是否单击了向上或向下箭头。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.num = 0;
self.tf.intValue = 0; //the stepper is set to 0 in IB
}
-(IBAction)textFieldDidChange:(id)sender {
self.num = self.stepper.floatValue = [sender floatValue];
}
-(IBAction)stepperDidChange:(id)sender {
if (self.num < self.stepper.floatValue) { //determines whether the up or down arrow was clicked
self.num = self.stepper.intValue = self.tf.intValue = [self nextLargerEven:self.num];
}else{
self.num = self.stepper.intValue = self.tf.intValue =[self nextSmallerEven:self.num];
}
}
-(int)nextLargerEven:(float) previousValue {
if ((int)previousValue % 2 == 0) {
return (int)previousValue + 2;
}else
return (int)previousValue + 1;
}
-(int)nextSmallerEven:(float) previousValue {
if ((int)previousValue % 2 == 0) {
if ((int)previousValue == previousValue) {
return (int)previousValue - 2;
}else{
return (int)previousValue;
}
}else
return (int)previousValue - 1;
}