簡體   English   中英

無法更改變量

[英]Cannot change the variable

大家好,我正在創建一個自定義文本標簽,但我無法從視圖控制器更改標簽文本,所以我需要幫助。

我的自定義文本標簽 swift 文件中有代碼:

import UIKit

class LinkLabel: UILabel {
    
    private var labelFirstText: String? = "First Text"
    private var labelSecondText: String? = "Second Text"
    
    var firstLabel: String? {
        didSet {
            self.labelFirstText = firstLabel
        }
    }
    var secondLabel: String? {
        didSet {
            self.labelSecondText = secondLabel
        }
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupLabel()
        self.setNeedsDisplay()
    }
    
    @objc
    private func setupLabel() {
        let firstTextNSA = [NSAttributedString.Key.font:
                                UIFont.systemFont(ofSize: 15, weight: .medium),
                            NSAttributedString.Key.foregroundColor: UIColor.secondaryTextColor]
        let secondTextNSA = [NSAttributedString.Key.font:
                                UIFont.systemFont(ofSize: 15, weight: .medium),
                             NSAttributedString.Key.foregroundColor: UIColor.appPurple]
        let attributedString1 = NSMutableAttributedString(string: labelFirstText ?? "First Label" + " ", attributes: firstTextNSA)
        let attributedString2 = NSMutableAttributedString(string: labelSecondText ?? "Second Label", attributes: secondTextNSA)

        attributedString1.append(attributedString2)
        self.attributedText = attributedString1
    }

}

還有我的視圖控制器:

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet private weak var signInLabel: LinkLabel!
    
    // MARK: - Life Cycle
        override func viewDidLoad() {
            super.viewDidLoad()
            signInLabel.firstLabel = "Already have an account?"
            signInLabel.secondLabel = "Sign in now"
        }
}

現在一切正常,但我無法更改標簽文本。 我寫了打印函數來記錄發生了什么,看看 didset 什么時候運行,labelFirstText 是“已經有一個帳戶?” 但是當 init 函數運行 labelFirstText 時采用默認值。 我不明白我該如何解決。

在任何值更改后立即添加對 setupLabel() 的調用:

var firstLabel: String? {
    didSet {
        self.labelFirstText = firstLabel
        setupLabel()
    }
}

var secondLabel: String? {
    didSet {
        self.labelSecondText = secondLabel
        setupLabel()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM