使用 UISlider 更新 UILabel 引发发件人调用的 "unresolved identifier" 错误

Updating UILabel with UISlider throwing "unresolved identifier" error for Sender call

下面的代码是我使用的唯一代码。我已经以编程方式构建了一个带有要更新的标签的 UISlider。我编写了一个函数,它应该调用 UISlider 的发送者并将标签字段更新为滑块的值。但是它一直为标签的变量名抛出 "unresolved identifier" 错误。我在哪里放置函数以便它可以访问标签值?我什么都试过了。

import UIKit

class ViewController: UIViewController {
    override func viewDidLoad()
    {
        super.viewDidLoad()
        let mySlider = UISlider(frame:CGRect(x: 60, y:550, width: 300, height: 20))
        mySlider.minimumValue = 5
        mySlider.maximumValue = 60
        mySlider.isContinuous = true
        mySlider.tintColor = .white
        mySlider.addTarget(self, action: #selector(ViewController.sliderValueDidChange(_:)), for: .valueChanged)

        let minuteLabel = UILabel(frame: CGRect(1500, 2000, 150, 1200))
        minuteLabel.center = CGPoint(200, 350)
        minuteLabel.textAlignment = .center
        minuteLabel.font = UIFont(name: minuteLabel.font.fontName, size:250)
        mySlider.addTarget(self, action: #selector(ViewController.sliderValueDidChange(_:)),for: .valueChanged)
        minuteLabel.textColor = UIColor.white
        minuteLabel.text = "\(mySlider.value)"

        self.view.addSubview(minuteLabel)
        self.view.addSubview(mySlider)
    }

    public func sliderValueDidChange(_sender: UISlider) {
        minuteLabel.text = "\(_sender.value)"
    }
}

这是因为您在 viewDidLoad() 中创建了 minuteLabel 但没有分配给 ViewController 中的任何 属性。

您可以在 class 中创建 属性 minuteLabel 并将 minuteLabelviewDidLoad() 分配给它。

class ViewController: UIViewController {

    private var minuteLabel: UILabel?

    override func viewDidLoad()
    {
        super.viewDidLoad()
        let mySlider = UISlider(frame:CGRect(x: 60, y:550, width: 300, height: 20))
        mySlider.minimumValue = 5
        mySlider.maximumValue = 60
        mySlider.isContinuous = true
        mySlider.tintColor = .white
        mySlider.addTarget(self, action: #selector(ViewController.sliderValueDidChange(_:)), for: .valueChanged)

        let minuteLabel = UILabel(frame: CGRect(1500, 2000, 150, 1200))
        minuteLabel.center = CGPoint(200, 350)
        minuteLabel.textAlignment = .center
        minuteLabel.font = UIFont(name: minuteLabel.font.fontName, size:250)
        mySlider.addTarget(self, action: #selector(ViewController.sliderValueDidChange(_:)),for: .valueChanged)
        minuteLabel.textColor = UIColor.white
        minuteLabel.text = "\(mySlider.value)"

        self.view.addSubview(minuteLabel)
        self.view.addSubview(mySlider)

        self.minuteLabel = minuteLabel // assign to class property
    }

    public func sliderValueDidChange(_sender: UISlider) {
        minuteLabel?.text = "\(_sender.value)"
    }

}