繁体   English   中英

当我点击增量按钮时,为什么我的步进器没有给出正确的值?

[英]why my stepper does't give the correct value when I tap the increment button?

我正在使用 kw stepper pod,因为它是可定制的。 我可以将递增按钮、递减按钮和使用我自己的标签分开。 但行为应该与 UIStepper 相同

在此处输入图片说明

这就是它的样子,它由 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 内部事件连接增量和减量按钮。

所以我希望当我点击增量按钮时,它会从 0,0 -> 1.0 -> 2.0 -> 3.0 等增加。

但就我而言,当点击增量按钮时,它会给出 0,0 -> 0,0 -> 1,0 -> 2,0

0,0 会出现两次。 为什么它出现两次? 如何解决这个问题

我知道我可以从这样的值更改事件中看到步进值

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

但我需要将事件与递增和递减按钮分开

这是我的谷歌驱动器上的项目: https : //drive.google.com/file/d/1IgeVW1OemRttoAOqJ6Ba8LpyZC_rc3-o/view?usp=sharing

可能在stepper.value更改之前调用incrementButtonDidTappeddecrementButtonDidTapped方法,因为KWStepper还侦听来自这两个按钮的touchUpInside事件以更改其值。

KWStepper公开了两个属性decrementCallbackincrementCallback ,您可以使用它们在值递减/递增时获得通知。 您可以在两个按钮上使用它们而不是IBAction

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

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

或者,您可以确认KWStepperDelegate并实现KWStepperDidIncrementKWStepperDidDecrement委托方法以获取通知。

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)"
    }
}

您可以使用以下代码替换您的点击事件

@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)"
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM