Добавьте NSUnderlineStyle.PatternDash в NSAttributedString в Swift?
Я пытаюсь добавить подчеркивание к некоторому тексту в моем приложении Swift. Это код, который у меня есть:
let text = NSMutableAttributedString(string: self.currentHome.name)
let attrs = [NSUnderlineStyleAttributeName:NSUnderlineStyle.PatternDash]
text.addAttributes(attrs, range: NSMakeRange(0, text.length))
homeLabel.attributedText = text
Но я получаю эту ошибку в строке text.addAttributes
:
NSString
не идентичен NSObject
Как добавить атрибут, содержащийся в перечислении, в NSMutableAttributedString в Swift?
Ответы
Ответ 1
Вот полный пример создания UILabel
с подчеркнутым текстом:
Свифт 5:
let homeLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
let text = NSMutableAttributedString(string: "hello, world!")
let attrs = [NSAttributedString.Key.underlineStyle: NSUnderlineStyle.patternDash.rawValue | NSUnderlineStyle.single.rawValue]
text.addAttributes(attrs, range: NSRange(location: 0, length: text.length))
homeLabel.attributedText = text
Свифт 4:
let homeLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 30))
let text = NSMutableAttributedString(string: "hello, world!")
let attrs = [NSAttributedStringKey.underlineStyle: NSUnderlineStyle.patternDash.rawValue | NSUnderlineStyle.styleSingle.rawValue]
text.addAttributes(attrs, range: NSRange(location: 0, length: text.length))
homeLabel.attributedText = text
Свифт 2:
Swift позволяет вам передавать Int
в метод, который принимает NSNumber
, так что вы можете сделать это немного чище, удалив преобразование в NSNumber
:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
Примечание. Этот ответ ранее использовал toRaw()
как и в первоначальном вопросе, но теперь он неверен, поскольку toRaw()
был заменен свойством rawValue
в Xcode 6.1.
Ответ 2
Если вы хотите фактическую пунктирную линию, вы должны выбрать OR | необработанные значения как PatternDash, так и StyleSingle перечисления, как показано ниже:
let dashed = NSUnderlineStyle.PatternDash.rawValue | NSUnderlineStyle.StyleSingle.rawValue
let attribs = [NSUnderlineStyleAttributeName : dashed, NSUnderlineColorAttributeName : UIColor.whiteColor()];
let attrString = NSAttributedString(string: plainText, attributes: attribs)
Ответ 3
В Xcode 6.1 SDK iOS 8.1 toRaw()
был заменен на rawValue
:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
Или проще:
var text : NSAttributedString = NSMutableAttributedString(string: str, attributes : [NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue])
Ответ 4
Оказывается, мне нужен метод toRaw()
- это работает:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length))