Как использовать UIStepper

Я пытаюсь работать с UIStepper для увеличения или уменьшения целого числа, но и «-», и «+» увеличивают целое число! Как распознать кнопки "+" и "-"?

В заголовочном файле UIStepper есть два UIButton:

UIButton *_plusButton;
UIButton *_minusButton;

Например :

- (IBAction)changeValue:(id)sender 
{        
    UIStepper *stepper = (UIStepper *) sender;

    stepper.maximumValue = 10;
    stepper.minimumValue = 0;      
    if (stepper)
    {
        integer++;
        [label setText:[NSString stringWithFormat:@"%d",integer]];
     }
     else
     { 
         integer--;
         [label setText:[NSString stringWithFormat:@"%d",integer]];
     }

}

person Mc.Lover    schedule 15.10.2011    source источник


Ответы (5)


Вы должны игнорировать ивары. Они не помогут вам.

UIStepper имеет свойство value, которое вы можете запросить, чтобы выяснить, каково текущее значение. Таким образом, ваш метод может быть просто:

- (IBAction)valueChanged:(UIStepper *)sender {
  double value = [sender value];

  [label setText:[NSString stringWithFormat:@"%d", (int)value]];
}
person Dave DeLong    schedule 15.10.2011
comment
спасибо, но у меня есть эта ошибка: Multiple methods named 'value' found и Initializing 'double' with an expression of incompatible type 'NSString *' - person Mc.Lover; 15.10.2011
comment
@Mc.Lover убедитесь, что переменная правильно введена или преобразована. Вам нужно убедиться, что это явно UIStepper*. Объявление его как id вызывает предупреждение. - person Dave DeLong; 15.10.2011
comment
Вы можете сделать это [(UIStepper*)sender value], если уверены, что отправитель всегда является UIStepper. - person Maciej Swic; 17.12.2012
comment
Тем не менее, вероятно, хорошая идея для предисловия: if ([sender class] == [UIStepper class]) - person Rembrandt Q. Einstein; 25.01.2013
comment
@RembrandtQ.Einstein Лично я бы использовал -[sender isKindOfClass:[UIStepper class]]. Вы никогда не узнаете, что это за класс UIStepper на самом деле, это может быть кластерный класс, который является подклассом UIStepper. - person Mazyod; 20.07.2013
comment
stepper.wraps = false для отключения autoRepeat и Int(stepper.incrementButton.state.rawValue) == 1 // + нажата кнопка Сработало для меня. - person Ravi; 13.12.2018

UIStepper возвращает значение Double, для быстрой версии сделайте следующее:

@IBAction func stepperValue(sender: UIStepper) {
    print("the stepper value is :\(sender.value)")
}
person bikram sapkota    schedule 04.08.2016

Возьмем выход UIStepper:

@property (strong, nonatomic) IBOutlet UIStepper *stepper;

В методе viewDidLoad:

self.stepper.wraps=YES;

если ДА, значение переходит от мин. ‹-> макс. по умолчанию = НЕТ

 self.stepper.autorepeat=YES;

если ДА, нажмите и удерживайте несколько раз, чтобы изменить значение. по умолчанию = ДА

Установите начальное значение на 0.

NSUInteger value= self.stepper.value;

self.label.text= [NSString stringWithFormat:@"%02lu",(unsigned long)value];

Установите максимальное значение

self.stepper.maximumValue=50;

Выполните действие UIStepper:

- (IBAction)valueDidChanged:(UIStepper *)sender {
//Whenever the stepper value increase and decrease the sender.value fetch the curent value of stepper
        NSUInteger value= sender.value;
        self.label.text= [NSString stringWithFormat:@"%02lu",value];
}
person Saurabh Jain    schedule 04.08.2016

Я думаю, что такая ошибка невозможна в Xcode 11.2. Но если вы нашли эту тему в поиске "Как пользоваться степпером" вот ответ:

1). Создайте степпер на раскадровке, перетащите его, как обычно. Он должен создать ссылочную розетку.

2). Вам нужна функция, связанная с этим конкретным степпером, аргументом которого является отправитель: UIStepper. Это должно быть что-то вроде

@IBAction func stepperValueChange(_ sender: UIStepper) {}

3). Теперь напишите, что должно происходить при выполнении функции (при каждом нажатии на степпер). Для пояснения воспользуемся меткой. Контроль перетащите его, как мы всегда делаем. Ниже приведена функция, эта строка выполняется при ударе по степперу.

valueLabel.text = Int(sender.value).description

Вот и все.

P.S. Степпер обладает «особыми способностями», а именно:

-> Автоповтор означает - удержание степпера быстро увеличивает счетчик. True/false -> Wrap — значения обведены «кругом». Падение ниже наименьшего значения даст наибольшее. Превышая самое большое - опускаешься до самого низкого. Степпер какой-то зацикленный. -> является непрерывным. Лучше сделать так, чтобы всегда было правдой.

Эти свойства я могу изменить, выбрав их в инспекторе атрибутов.

Также для справки: https://www.ioscreator.com/tutorials/stepper-ios-tutorial

person Georgii Ivannikov    schedule 06.12.2019

Пытаться

    stepper.maximumValue = 10.0;
    stepper.minimumValue = 0.0;
person James Thiele    schedule 01.02.2012