使用 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
并将minuteLabel
从viewDidLoad()
分配给它。
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