6

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

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

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

4

9 回答 9

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
        }
}
于 2014-04-07T21:37:02.947 回答
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.
    }
}

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
于 2012-08-05T16:55:05.547 回答
6

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

在此处输入图像描述

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

-(IBAction)stepperAction:(NSStepper *)sender {
    if ([sender intValue] == 0) {
        NSLog(@"up");
    } else {
        sender.intValue = 0;
        NSLog(@"down");
    }
}
于 2016-05-10T08:22:37.337 回答
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
}
于 2018-09-03T06:26:36.213 回答
3

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

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

如果您有多个步进器,请以不同方式设置每个标签,然后仍然使用此方法并测试 sender.tag。

于 2016-12-19T09:16:15.540 回答
3
var sampleStepperValueForIncrement:Int = Int()


@IBAction func sampleStepperValueChanged(_ sender: UIStepper) {        

        if(Int(sender.value) > sampleStepperValueForIncrement){
            print("increasing")
            sampleStepperValueForIncrement += 1

        }
        else{
            print("decresing")
            sampleStepperValueForIncrement =  sampleStepperValueForIncrement - 1
        }
    }
于 2017-03-15T06:09:18.530 回答
2

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

于 2012-08-05T11:59:15.950 回答
1

斯威夫特 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)")

     }

另一种选择是将最大值限制为 1。因此 uistepper 将有两个状态 - 0 和 1 。

使用 switch 语句来区分:

switch (mapViewZoomStepper.value) {
  case 0:
    print("A")
    break;
case 1:
 print("B")
 break;

  default:
    break;
}
于 2016-03-29T08:56:02.927 回答
-1

斯威夫特 5.0

var oldValue: Int!

override func viewDidLoad(){
    super.viewDidLoad()
    oldValue = Int(stepper.minimumValue)
}

@IBAction(){
if Int(sender.value) > oldValue{
  // Positive
}else{
   // Negative
}
oldValue = Int(sender.value)

 }
于 2019-08-27T22:24:25.627 回答