如何在UILabel文本中添加空格

时间:2017-12-20 14:52:35

标签: swift text uilabel whitespace

我想在UILabel的任何给定文本前添加一个空格。

我认为我可以按如下方式扩展UILabel类:

class UILabel_iKK: UILabel {

    override var text: String? {
        didSet {
            if let txt = self.text {
                self.text = " " + txt
            }
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

但显然这会导致无限循环(即文本更改会导致didSet一次又一次地触发。

以最优雅的方式做到这一点的另一种方式是什么?

3 个答案:

答案 0 :(得分:3)

是的,这是可能的。虽然我不喜欢它,但以下代码永远不会循环:

didSet {
  if let txt = self.text, txt.first != " " {
    self.text = " " + txt
  }
}

答案 1 :(得分:2)

这应该有效

class Label_iKK: UILabel {

    override var text: String? {
        set(value) {
            if let txt = value {
                super.text = " " + txt
            }
        }
        get {
            return super.text
        }
    }
}

答案 2 :(得分:0)

感谢Andrea和Spads,感谢你们的想法!

我在阅读部分添加了空字符串添加 - 因为我只想在UI中看到它时在Label内部有额外的空格(但在代码中处理它时不是实际值)! )...

class UILabel_iKK: UILabel {

    var myText: String? = ""

    override var text: String? {
        get {
            if let txt = super.text {
                if txt.count >= 3 {
                    return String(txt[3...])
                } else {
                    return super.text
                }
            } else {
                return super.text
            }
        }
        set(value) {
        if let txt = value {
            super.text = "   " + txt   // 3 white-spaces added here...
            }
        }
    }
}