0

NSStepperと一緒に使用していNSTextFieldます。ユーザーは、テキスト フィールドを使用して値を設定するか、NSStepper を使用して値を変更できます。以下の例を使用して質問を引用します。
ステッパーの現在の値が 4 で、ステッパーの増分値が 2 であるとします。 ここに画像の説明を入力

NSStepper の上矢印をクリックすると、値は次のようになります。
ここに画像の説明を入力

ここで、現在の値が 4.5 だったとします。つまり:
ここに画像の説明を入力

上矢印を使用すると、値は次のようになります。
ここに画像の説明を入力

私が必要とするのは、現在の値が 4.5 の場合、上矢印を使用した後、値が6.5 ではなく6になることです。

これを達成するためのアイデアは大歓迎です!

4

2 に答える 2

1

私が必要とするのは、現在の値が 4.5 の場合、上矢印を使用した後、値が 6.5 ではなく 6 になることです。

あなたが求めていることを正確に伝えるのは難しいですが、推測してみましょう: 数値の小数部分を削除し、定義したステップ量 (2) だけインクリメントしたいようです。関数を使用してこれを行うことができますfloor()その他の Objective-C 数学関数については、こちらを参照してください

double floor ( double ) - 引数の小数部分を削除します

NSLog(@"res: %.f", floor(3.000000000001)); 
//result 3 
NSLog(@"res:%.f", floor(3.9999999));
//result 3
于 2012-07-18T16:33:26.683 に答える
0

あなたが何を望んでいるのか理解できれば、このコードは次の偶数 (クリックした矢印に応じて上または下) を表示しますが、テキスト フィールドに整数以外の数値を入力することはできます。tf と stepper は IBOutlets であり、num は矢印をクリックする前にステッパーの値を追跡するプロパティ (float) であるため、新しい数値と比較して、上矢印または下矢印がクリックされたかどうかを確認できます。

- (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; 
}
于 2012-07-18T16:19:47.860 に答える