почему мой степпер не дает правильное значение, когда я нажимаю кнопку увеличения? - PullRequest
0 голосов
/ 12 января 2019

Я использую шаговый модуль KW, так как он настраивается. Я могу отделить кнопку увеличения, кнопку уменьшения и использовать мою собственную метку. но поведение должно быть таким же, как UIStepper

enter image description here

это то, на что это похоже, оно состоит из 1 кнопки увеличения, 1 кнопки уменьшения и метки счетчика.

вот код на моем контроллере вида:

import UIKit
import KWStepper

class ViewController: UIViewController {

    @IBOutlet weak var counterLabel: UILabel!
    @IBOutlet weak var decrementButton: UIButton!
    @IBOutlet weak var incrementButton: UIButton!

    var stepper: KWStepper!

    override func viewDidLoad() {
        super.viewDidLoad()

        stepper = KWStepper(decrementButton: decrementButton, incrementButton: incrementButton)
        stepper.autoRepeat = false
        stepper.autoRepeatInterval = 1
        stepper.wraps = false
        stepper.minimumValue = 0
        stepper.maximumValue = 100
        stepper.incrementStepValue = 1
        stepper.decrementStepValue = 1
        stepper.value = 0.0

        counterLabel.text = "\(stepper.value)"


    }

    @IBAction func incrementButtonDidTapped(_ sender: Any) {

        counterLabel.text = "\(stepper.value)"

    }


    @IBAction func decrementButtonDidTapped(_ sender: Any) {

        counterLabel.text = "\(stepper.value)"

    }
}

Я подключаю кнопку увеличения и уменьшения, используя @IBAction touch up inside event.

поэтому я ожидаю, что когда я нажму кнопку увеличения, она будет увеличиваться с 0,0 -> 1,0 -> 2,0 -> 3,0 и т. Д.

но в моем случае при нажатии на кнопку увеличения это даст 0,0 -> 0,0 -> 1,0 -> 2,0

0,0 появится дважды. почему это появляется дважды? как решить эту проблему

Я знаю, что могу видеть шаговое значение из события изменения значения, как это

stepper
    .valueChanged { stepper in
        // ...
    }

но мне нужно отделить событие от кнопки увеличения и уменьшения

вот проект на моем диске Google: https://drive.google.com/file/d/1IgeVW1OemRttoAOqJ6Ba8LpyZC_rc3-o/view?usp=sharing

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Методы incrementButtonDidTapped и decrementButtonDidTapped, возможно, вызываются до изменения stepper.value, поскольку KWStepper также прослушивает события touchUpInside от обеих этих кнопок, чтобы изменить его значение.

KWStepper предоставляет два свойства decrementCallback и incrementCallback, которые можно использовать для получения уведомлений, когда значение уменьшается / увеличивается. Вы можете использовать их вместо IBAction на двух кнопках.

stepper.decrementCallback = { (stepper) in
    self.counterLabel.text = "\(stepper.value)"
}

stepper.incrementCallback = { (stepper) in
    self.counterLabel.text = "\(stepper.value)"
}

Кроме того, вы можете подтвердить KWStepperDelegate и реализовать KWStepperDidIncrement и KWStepperDidDecrement методы делегирования для получения уведомлений.

import UIKit
import KWStepper

class ViewController: UIViewController, KWStepperDelegate {

    @IBOutlet weak var counterLabel: UILabel!
    @IBOutlet weak var decrementButton: UIButton!
    @IBOutlet weak var incrementButton: UIButton!

    var stepper: KWStepper!

    override func viewDidLoad() {
        super.viewDidLoad()

        stepper = KWStepper(decrementButton: decrementButton, incrementButton: incrementButton)
        stepper.autoRepeat = false
        stepper.autoRepeatInterval = 1
        stepper.wraps = false
        stepper.minimumValue = 0
        stepper.maximumValue = 100
        stepper.incrementStepValue = 1
        stepper.decrementStepValue = 1
        stepper.value = 0.0

        // Set the delegate
        stepper.delegate = self

        counterLabel.text = "\(stepper.value)"


    }

    @objc func KWStepperDidIncrement() {
        counterLabel.text = "\(stepper.value)"
    }


    @objc func KWStepperDidDecrement() {
        counterLabel.text = "\(stepper.value)"
    }
}
0 голосов
/ 12 января 2019

Вы можете заменить ваши события клика следующим кодом

@IBAction func incrementButtonDidTapped(_ sender: Any) {

    stepper.valueChanged { (steper) in
        self.counterLabel.text = "\(steper.value)"
    }

}


@IBAction func decrementButtonDidTapped(_ sender: Any) {

    stepper.valueChanged { (steper) in
        self.counterLabel.text = "\(steper.value)"
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...