swift - 使用 UISlider 更新 UILabel 为 Sender 调用抛出 "unresolved identifier"错误

标签 swift uilabel uislider

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

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 中的任何属性。

您可以在类中创建属性 minuteLabel 并将 viewDidLoad() 中的 minuteLabel 分配给它。

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

}

关于swift - 使用 UISlider 更新 UILabel 为 Sender 调用抛出 "unresolved identifier"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50203284/

相关文章:

iOS QOS_CLASS_USER_INITIATED 在与 UI 交互时卡住 (Swift)

xcode - 在单个 View 中更改所有 UILabel

ios - 给定带有多行标签的 Collection View 单元格的宽度,如何获得首选的 AutoLayout 高度?

ios - UISlider 不在原型(prototype)单元格中滑动

jquery - 使用 JQuery slider 时如何将 DIV 保持在同一行?

ios - 无法将类型 'UIViewController' 的值转换为 UITableViewController

swift - 一个 VC 对另一个 VC 的错误设置值

ios - 处理异步错误处理

iphone - UILabel 文本错误

ios - 当幻灯片拖动时,如何在动态表格 View 单元格的标签上显示幻灯片的当前值?