UIStepper.找出是递增还是递减

M.C*_*.C. 5 ios uistepper

确定在UIStepper中是否按下加号或减号按钮我使用此方法:

- (void)stepperOneChanged:(UIStepper*)stepperOne
Run Code Online (Sandbox Code Playgroud)

我将stepperOne.value与我的TableView类中保存的全局值进行比较.
我不认为这是正确的方法.

所以为了澄清我会显示我正在使用的"坏"代码:

- (void)stepperOneChanged:(UIStepper*)stepperOne
{
      BOOL PlusButtonPressed=NO;  
      if(stepperOne.value>globalValue)  
      {   
          PlusButtonPressed =YES;  
      }  
      globalValue=stepperOne.value;

    ////do what you need to do with the PlusButtonPressed boolean
}
Run Code Online (Sandbox Code Playgroud)

那么这样做的正确方法是什么?(无需保存全局变量)

Mub*_*all 13


这是一种简单而简短的方法,用于识别是否单击了"+"或" - "点击了UIStepper


//First You have to declare oldValue as an int (or long/float/NSInteger etc. etc.) in Header File 
//So that you can access globally to that particular implementation file

- (void)viewDidLoad
{
     [super viewDidLoad];
     oldValue=stepperObj.value;
}

- (IBAction)stepperStep:(id)sender 
{
        if (stepperObj.value>oldValue) {
             oldValue=oldValue+1;
             //Your Code You Wanted To Perform On Increment
        }
       else {
             oldValue=oldValue-1;
             //Your Code You Wanted To Perform On Decrement
        }
}
Run Code Online (Sandbox Code Playgroud)


Jef*_*mas 6

所以我想到了一个子类.事实证明并非如此糟糕(包装值除外).

使用子类

- (IBAction)stepperOneChanged:(UIStepper*)stepperOne
{
    if (stepperOne.plusMinusState == JLTStepperPlus) {
       // Plus button pressed
    }
    else if (stepperOne.plusMinusState == JLTStepperMinus) {
       // Minus button pressed
    } else {
       // Shouldn't happen unless value is set programmatically.
    }
}
Run Code Online (Sandbox Code Playgroud)

JLTStepper.h

#import <UIKit/UIKit.h>

typedef enum JLTStepperPlusMinusState_ {
    JLTStepperMinus = -1,
    JLTStepperPlus  = 1,
    JLTStepperUnset = 0
} JLTStepperPlusMinusState;

@interface JLTStepper : UIStepper
@property (nonatomic) JLTStepperPlusMinusState plusMinusState;
@end
Run Code Online (Sandbox Code Playgroud)

JLTStepper.m

#import "JLTStepper.h"

@implementation JLTStepper
- (void)setValue:(double)value
{
    BOOL isPlus  = self.value < value;
    BOOL isMinus = self.value > value;

    if (self.wraps) { // Handing wrapped values is tricky
        if (self.value > self.maximumValue - self.stepValue) {
            isPlus  = value < self.minimumValue + self.stepValue;
            isMinus = isMinus && !isPlus;
        } else if (self.value < self.minimumValue + self.stepValue) {
            isMinus = value > self.maximumValue - self.stepValue;
            isPlus  = isPlus && !isMinus;
        }
    }

    if (isPlus)
        self.plusMinusState = JLTStepperPlus;
    else if (isMinus)
        self.plusMinusState = JLTStepperMinus;

    [super setValue:value];
}
@end
Run Code Online (Sandbox Code Playgroud)


Bob*_*and 6

首先将步进器的最小值和最大值设置为0和1,并确保未选中Value Wraps。

在此处输入图片说明

然后,您可以使用以下代码检查单击了哪个箭头

-(IBAction)stepperAction:(NSStepper *)sender {
    if ([sender intValue] == 0) {
        NSLog(@"up");
    } else {
        sender.intValue = 0;
        NSLog(@"down");
    }
}
Run Code Online (Sandbox Code Playgroud)


Hai*_*lik 5

斯威夫特 3.0

在您的步进器操作中,请确保在之后将 stepper.value 重置为 0,这使得负压时步进器值 -1,正压时为 1。

@IBAction func Stepper(_ sender: UIStepper) {
    if sender.value == 1.0{
        //positive side was pressed
    }else if sender.value == -1.0{
        //negative side was pressed
    }
    sender.value = 0  //resetting the stepper value so negative is -1 and positive is 1
}
Run Code Online (Sandbox Code Playgroud)