确定在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
//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)
所以我想到了一个子类.事实证明并非如此糟糕(包装值除外).
使用子类
- (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)
首先将步进器的最小值和最大值设置为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)
斯威夫特 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)
| 归档时间: |
|
| 查看次数: |
9753 次 |
| 最近记录: |