为什么当我点击增量按钮时我的步进器没有给出正确的值?
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 inside 事件连接递增和递减按钮。
所以我希望当我点击增量按钮时,它会从
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
您可以用以下代码替换您的点击事件
@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)"
}
}
可能会在 stepper.value
更改之前调用 incrementButtonDidTapped
和 decrementButtonDidTapped
方法,因为 KWStepper
还监听来自这两个按钮的 touchUpInside
事件更改其值。
KWStepper
公开了两个属性 decrementCallback
和 incrementCallback
,您可以使用它们在值达到 decremented/incremented 时收到通知。您可以在两个按钮上使用这些代替 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)"
}
}
我正在使用 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 inside 事件连接递增和递减按钮。
所以我希望当我点击增量按钮时,它会从 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
您可以用以下代码替换您的点击事件
@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)"
}
}
可能会在 stepper.value
更改之前调用 incrementButtonDidTapped
和 decrementButtonDidTapped
方法,因为 KWStepper
还监听来自这两个按钮的 touchUpInside
事件更改其值。
KWStepper
公开了两个属性 decrementCallback
和 incrementCallback
,您可以使用它们在值达到 decremented/incremented 时收到通知。您可以在两个按钮上使用这些代替 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)"
}
}