UIStepper。 找出是增加还是减less

确定是否在UIStepper中按下加号或减号button我使用这种方法:

- (void)stepperOneChanged:(UIStepper*)stepperOne 

我比较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 } 

那么做这件事的正确方法是什么? (不必保存全局variables)

所以我想到了这个子类。 事实certificate,并不是那么糟糕(除了包装值)。

使用子类

 - (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. } } 

JLTStepper.h

 #import <UIKit/UIKit.h> typedef enum JLTStepperPlusMinusState_ { JLTStepperMinus = -1, JLTStepperPlus = 1, JLTStepperUnset = 0 } JLTStepperPlusMinusState; @interface JLTStepper : UIStepper @property (nonatomic) JLTStepperPlusMinusState plusMinusState; @end 

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 

这是识别单击“+”还是单击“ – ”单击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 } } 

一种方法是使用UISteppers标签属性。 所以在viewDidLoad设置标签的值。 从那时起,在每个操作方法中,您可以先比较,最后是方法更新值。

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

在这里输入图像说明

然后你可以使用下面的代码来检查哪个箭头被点击

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

将最小值设置为0,最大值设置为2,将值设置为1.然后:

 - (IBAction)stepperAction:(UIStepper *)sender // value changed { if ( sender.value == 0) { NSLog(@"down"); } else { // else up NSLog(@"up"); } sender.value = 1; // reset } 

如果您有多个步进器,请分别设置每个标签,然后仍使用此方法并testingsender.tag。

Swift 2.0:

声明:

 @IBOutlet weak var mapViewZoomStepper: UIStepper! var mapViewZoomStepperValue: Double = -1.0 

价值变化时:

  @IBAction func mapViewZoomStepperValueChanged(sender: AnyObject) { if (mapViewZoomStepper.value > mapViewZoomStepperValue) { print("increment") mapViewZoomStepperValue = mapViewZoomStepperValue + 1.0 } else { print("decrement") mapViewZoomStepperValue = mapViewZoomStepper.value - 1.0 } print("compare // stored Value : \(mapViewZoomStepperValue) && real time value : \(mapViewZoomStepper.value)") } 

另一个select是限制最大值为1.所以uistepper将有两个状态 – 0和1。

使用switch语句来区分:

 switch (mapViewZoomStepper.value) { case 0: print("A") break; case 1: print("B") break; default: break; } 
 var sampleStepperValueForIncrement:Int = Int() @IBAction func sampleStepperValueChanged(_ sender: UIStepper) { if(Int(sender.value) > sampleStepperValueForIncrement){ print("increasing") sampleStepperValueForIncrement += 1 } else{ print("decresing") sampleStepperValueForIncrement = sampleStepperValueForIncrement - 1 } }