使用 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
并将 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。我编写了一个函数,它应该调用 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
并将 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)"
}
}