私の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
と同一ではありません
列挙型に含まれる属性をSwiftのNSMutableAttributedStringに追加するにはどうすればよいですか?
下線が引かれたUILabel
を作成する完全な例を次に示します。
Swift 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
_
Swift 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
_
Swift 2:
SwiftではInt
をNSNumber
を受け取るメソッドに渡すことができるため、NSNumber
への変換を削除することで、これを少しクリーンにすることができます。
_text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
_
注:この回答は以前、元の質問で使用されていたtoRaw()
を使用していましたが、toRaw()
がXcode 6.1のプロパティrawValue
に置き換えられたため、これは正しくありません。
実際の破線が必要な場合は、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)
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])
toRaw()
メソッドが必要であることがわかりました-これは機能します:
text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length))