使用 UISlider 更新 UILabel 会为 Sender 调用抛出“未解析的标识符”错误

Posted

技术标签:

【中文标题】使用 UISlider 更新 UILabel 会为 Sender 调用抛出“未解析的标识符”错误【英文标题】:Updating UILabel with UISlider throwing "unresolved identifier" error for Sender call 【发布时间】:2018-05-06 18:41:25 【问题描述】:

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

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

【问题讨论】:

minuteLabel 是一个仅存在于viewDidLoad() 中的本地变量。它在sliderValueDidChange(_sender:) 中不存在。您需要将其声明为实例变量。 【参考方案1】:

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

您可以在类内创建属性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)"
    


【讨论】:

谢谢!完全忘记了!

以上是关于使用 UISlider 更新 UILabel 会为 Sender 调用抛出“未解析的标识符”错误的主要内容,如果未能解决你的问题,请参考以下文章

在 UISlider 的缩略图上不断更改 UILabel 的值

如何使用 UIslider 更改 UILabel.font 大小

在 Swift 中使用 UISlider 以编程方式更改 UILabel

根据 UISlider 值更改 UILabel 的案例语句

UISlider - 将 UILabel 添加到最小/最大 UIImageView?

UISLider 以正确的方式改变 UILabel 的值