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

Posted

技术标签:

【中文标题】在 Swift 中使用 UISlider 以编程方式更改 UILabel【英文标题】:Programmatically Change UILabel with UISlider in Swift 【发布时间】:2016-01-03 22:17:54 【问题描述】:

我正在学习 Swift,并尝试使用 Slider 以编程方式更改 Label 值。我在 func 中收到一个错误,说 paybackLabel 是一个未解析的标识符。这应该怎么做?

import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        //Create Label
        let paybackLabel = UILabel(frame: CGRectMake(0, 0, 300, 41))
        paybackLabel.center = CGPointMake(190, 284)
        paybackLabel.textAlignment = NSTextAlignment.Center
        paybackLabel.font = UIFont(name: paybackLabel.font.fontName, size: 40)
        paybackLabel.textColor = UIColor.whiteColor()
        paybackLabel.text = "Hello World"
        self.view.addSubview(paybackLabel)

        //Create Slider
        let paybackSlider = UISlider(frame: CGRectMake (45,546,310,31))
        paybackSlider.minimumValue = 0
        paybackSlider.maximumValue = 1000
        paybackSlider.continuous = true
        paybackSlider.tintColor = UIColor.blueColor()
        paybackSlider.value = 500
        paybackSlider.addTarget(self, action: "paybackSliderValueDidChange:",forControlEvents: .ValueChanged)

        self.view.addSubview(paybackSlider)

    

    func paybackSliderValueDidChange(sender: UISlider!)
    
        print("payback value: \(sender.value)")
        paybackLabel.text = "\(sender.value)"

    



【问题讨论】:

是的,实际上代码不应该编译,你必须在 viewDidLoad 之外声明 paybackLabel 作为 var 并在 viewDidLoad 中修改它,然后在 paybackSliderValueDidChange 中更改文本 请查看我给出的答案。如果它工作正常,请接受并支持我的回答。 【参考方案1】:

按照我在此处的建议更正您的代码。

1.) 为外部定义两个变量以公开访问和修改标签值

var paybackLabel : UILabel = UILabel()
var paybackSlider : UISlider = UISlider()

2.) 将以下代码放入 viewDidload()

//Create Label

paybackLabel = UILabel(frame: CGRectMake(10, 20, 100, 41))
paybackLabel.center = CGPointMake(190, 61)
paybackLabel.textAlignment = NSTextAlignment.Center
paybackLabel.font = UIFont(name: paybackLabel.font.fontName, size:10)
paybackLabel.textColor = UIColor.blueColor()
paybackLabel.text = "Hello World"
self.view.addSubview(paybackLabel)

//Create Slider

paybackSlider = UISlider(frame: CGRectMake (45,70,310,31))
paybackSlider.minimumValue = 0
paybackSlider.maximumValue = 1000
paybackSlider.continuous = true
paybackSlider.tintColor = UIColor.blueColor()
paybackSlider.value = 500
paybackSlider.addTarget(self, action: "paybackSliderValueDidChange:",forControlEvents: .ValueChanged)
paybackLabel.text = "\(paybackSlider.value)"
self.view.addSubview(paybackSlider)

3.) 不通过改变 slidervaluechanged 事件来改变在标签上显示值的函数

func paybackSliderValueDidChange(sender: UISlider!)

    print("payback value: \(sender.value)")
    paybackLabel.text = "\(sender.value)"

结果:

现在它的工作很好享受..

【讨论】:

【参考方案2】:

在 ViewDidLoad() 之外全局声明

     var  paybackLabel = UILabel()
     var paybackSlider = UISlider()

并且不要忘记将 userInteractionEnabled 设置为 true

   paybackLabel.userInteractionEnabled = true
    paybackSlider.userInteractionEnabled = true

【讨论】:

谢谢。 userInteractionEnabled 有什么作用?看起来标签和滑块在没有它的情况下也能正常工作。 另外,为什么要将 var paybackSlider 声明为全局变量?没有它似乎也可以工作。

以上是关于在 Swift 中使用 UISlider 以编程方式更改 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中自定义 UISlider 值

Swift 在 UITableViewCell 中以正确的方式使用 UISlider?

以编程方式在 UITableViewCells 中嵌入多个 UISlider 和 UILabel 控件

在 Swift 中:如何使用 uislider 值作为变量来设置旋转速度

iPhone:编程 UISlider 以定位在点击的位置

以编程方式滑动 UISlider