如何在 Swift 中更改 UILabel 的文本属性?

Posted

技术标签:

【中文标题】如何在 Swift 中更改 UILabel 的文本属性?【英文标题】:How to change the text attribute of a UILabel in Swift? 【发布时间】:2019-12-17 20:18:00 【问题描述】:

我以编程方式设置了一个 UILabel,我试图通过稍后在 ViewController 中调用的函数更改文本属性,但是当调用该函数时,questionLabel.text 保持默认值“欢迎”。

基本上我想要完成的是:

  func changeLabelText() 
            questionLabel.text = "New label text"
            print(questionLabel.text!)
        
        changeLabelText()

        // prints "New label text"

但我实际上得到的是:

   func changeLabelText() 
            questionLabel.text = "New label text"
            print(questionLabel.text!)
        
        changeLabelText()

        // prints "Welcome"

我的标签是这样设置的:

class ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate 

    @IBOutlet var cameraView: UIView!

        var questionLabel: UILabel 

            let label = UILabel()
            label.lineBreakMode = .byWordWrapping
            label.backgroundColor = .white
            label.textColor = .black
            label.text = "Welcome"
            label.textAlignment = .center
            label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)

            return label

         

有什么建议吗?非常感谢!

【问题讨论】:

【参考方案1】:

当前

var questionLabel: UILabel  
        let label = UILabel()
        label.lineBreakMode = .byWordWrapping
        label.backgroundColor = .white
        label.textColor = .black
        label.text = "Welcome"
        label.textAlignment = .center
        label.frame = CGRect(x: 65, y: 100, width: 300, height: 65) 
        return label 
 

是一个计算属性,因此每次访问都会获得一个新的单独实例

questionLabel.text = "New label text" // instance 1
print(questionLabel.text!)   // instance 2

你需要一个闭包

var questionLabel: UILabel =  
        let label = UILabel()
        label.lineBreakMode = .byWordWrapping
        label.backgroundColor = .white
        label.textColor = .black
        label.text = "Welcome"
        label.textAlignment = .center
        label.frame = CGRect(x: 65, y: 100, width: 300, height: 65) 
        return label 
()

【讨论】:

【参考方案2】:

克拉蒙, 你可以试试这个。

假设您想更改标签的某些文本,您总是为此创建两个标签,但更改标签文本颜色的方法是错误的。您可以使用 NSMutableAttributedString 更改标签的某些文本颜色。首先,您必须找到要更改该文本颜色的文本范围,然后将文本范围设置为 NSMutableAttributedString 对象为与完整字符串相比,然后使用 NSMutableAttributedString 对象设置标签属性文本。示例:

let strNumber: NSString = "Hello Test" as NSString // you must set your  
let range = (strNumber).range(of: "Test")
let attribute = NSMutableAttributedString.init(string: strNumber)
attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: range)
yourLabel.attributedText = attribute

如果你想在你的应用程序中多次使用它,你可以创建 UILabel 的扩展,它会变得更简单:-

extension UILabel 
func halfTextColorChange (fullText : String , changeText : String ) 
    let strNumber: NSString = fullText as NSString
    let range = (strNumber).range(of: changeText)
    let attribute = NSMutableAttributedString.init(string: fullText)
    attribute.addAttribute(NSForegroundColorAttributeName, value: UIColor.red , range: range)
    self.attributedText = attribute

使用您的标签:- yourLabel = "你好测试" yourLabel.halfTextColorChange(fullText: totalLabel.text!, changeText: "Test")

【讨论】:

【参考方案3】:

将计算变量更改为惰性初始化器,如下所示:


lazy var questionLabel: UILabel = 

    let label = UILabel()
    label.lineBreakMode = .byWordWrapping
    label.backgroundColor = .white
    label.textColor = .black
    label.text = "Welcome"
    label.textAlignment = .center
    label.frame = CGRect(x: 65, y: 100, width: 300, height: 65)

    return label

()

【讨论】:

以上是关于如何在 Swift 中更改 UILabel 的文本属性?的主要内容,如果未能解决你的问题,请参考以下文章

当 UIStepper 在 Swift 4 中以编程方式点击时如何更改 UILabel 的文本,如果它们都在 UITableViewCell 中?

从 UITableViewCell 中点击 Swift 更改标签文本颜色

如何在 Swift 中触摸 UILabel 时对其进行编辑?

iOS Swift 如何更改或更新自定义 UITableViewCell 中的 UILabel 属性

如何在 Swift 中更改 UILabel 的字体大小?

UIProgressBar:如何根据背景颜色更改 UILabel 颜色