Обновление UILabel с помощью UISlider выдает ошибку «неразрешенный идентификатор» для вызова отправителя - PullRequest
0 голосов
/ 06 мая 2018

Код ниже - единственный код, который я использую. Я программно создал 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)"
    }
}

1 Ответ

0 голосов
/ 06 мая 2018

Это потому, что вы создаете minuteLabel в viewDidLoad(), но не присваиваете ни одному свойству внутри 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)"
    }

}
...