如何检查UILabel是否以编程方式归因于文本或普通文本?

Pav*_*eev 8 nsattributedstring uilabel ios

有没有办法判断UILabel是否使用label.attributedTextlabel.text属性设置了文本?

问题是当你设置时attributedText,text也会更新,反之亦然,因此无法检查nil的这些属性.

Saj*_*jon 5

受@lukas-o 的启发,我写了一个扩展UILabel来确定它是否包含一个attributedText。事实上,如果NSAttributedString不包含任何属性,则此计算属性会将其评估为没有属性。

extension UILabel {
    var isAttributed: Bool {
        guard let attributedText = attributedText else { return false }
        let range = NSMakeRange(0, attributedText.length)
        var allAttributes = [Dictionary<String, Any>]()
        attributedText.enumerateAttributes(in: range, options: []) { attributes, _, _ in
            allAttributes.append(attributes)
        }
        return allAttributes.count > 1
    }
} 
Run Code Online (Sandbox Code Playgroud)


Val*_*tte 0

这就是我用的。如果范围长度等于未归属文本长度,则该文本仅具有单个属性,因此未归属。

NSRange range;
[label.attributedText attributesAtIndex:0 effectiveRange:&range];
BOOL isAttributed = label.text.length==range.length;
Run Code Online (Sandbox Code Playgroud)