【问题标题】:Error when adding selector to addTarget function for UIStepper - Swift 3将选择器添加到 UIStepper 的 addTarget 函数时出错 - Swift 3
【发布时间】:2017-01-10 03:51:11
【问题描述】:

我正在尝试将UIStepper 合并到UITextField 中,同时增加步进器的值,UITextField 也随之更新为该值。我不断收到错误:

“由于未捕获的异常''NSInvalidArgumentException'而终止应用程序,原因:'-[Calculator.SplitViewController stepperValueChanged:]:无法识别的选择器发送到实例0x7fd730c0af30”`

每当我运行我的应用并点击步进器上的“+”按钮时。

有什么解决办法吗?我检查了我的选择器功能,我认为它看起来不错。

override func viewDidLoad() {
    super.viewDidLoad()

    partyOfStepper.autorepeat = true
    partyOfStepper.minimumValue = 1
    partyOfStepper.maximumValue = 99
    partyOfTextField.text = "\(Int(partyOfStepper.value))"
    partyOfStepper.addTarget(self, action: #selector(stepperValueChanged(stepper:)), for: .valueChanged)

}


@IBAction func calculateButtonTapped(_ sender: Any) {
}


func stepperValueChanged(stepper: UIStepper) {

    let stepperMapping: [UIStepper: UITextField] = [partyOfStepper: partyOfTextField]
    stepperMapping[stepper]!.text = "\(Int(stepper.value))"

}

【问题讨论】:

  • 使用完整且准确的错误消息更新您的问题。您遗漏了消息的导入部分。
  • 您应该将按钮绑定到calculateButtonTapped,并将步进值更新为stepperValueChanged
  • 在界面构建器(故事板)中检查您已为 UIStepper 设置的操作,只需删除该操作即可。

标签: swift swift3 xcode8 uistepper addtarget


【解决方案1】:

您的代码对我有用,正如 Nariv 所说,确保您之前没有在设计器中为 UIStepper 创建过操作(检查连接检查器):

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var partyOfStepper: UIStepper!
    @IBOutlet weak var partyOfTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        partyOfStepper.autorepeat = true
        partyOfStepper.minimumValue = 1
        partyOfStepper.maximumValue = 99
        partyOfTextField.text = "\(Int(partyOfStepper.value))"
        partyOfStepper.addTarget(self, action: #selector(stepperValueChanged(stepper:)), for: .valueChanged)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func stepperValueChanged(stepper: UIStepper) {

        let stepperMapping: [UIStepper: UITextField] = [partyOfStepper: partyOfTextField]
        stepperMapping[stepper]!.text = "\(Int(stepper.value))"

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多