web-dev-qa-db-ja.com

NSUnderlineStyle.PatternDashをSwiftのNSAttributedStringに追加しますか?

私の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行:

NSStringNSObjectと同一ではありません

列挙型に含まれる属性をSwiftのNSMutableAttributedStringに追加するにはどうすればよいですか?

19
Undo

下線が引かれた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ではIntNSNumberを受け取るメソッドに渡すことができるため、NSNumberへの変換を削除することで、これを少しクリーンにすることができます。

_text.addAttribute(NSUnderlineStyleAttributeName, value: NSUnderlineStyle.StyleDouble.rawValue, range: NSMakeRange(0, text.length))
_

注:この回答は以前、元の質問で使用されていたtoRaw()を使用していましたが、toRaw()がXcode 6.1のプロパティrawValueに置き換えられたため、これは正しくありません。

49
vacawama

実際の破線が必要な場合は、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)
13
Rich Fox

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]) 
7
Rémy Virin

toRaw()メソッドが必要であることがわかりました-これは機能します:

text.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(integer:(NSUnderlineStyle.StyleDouble).toRaw()), range: NSMakeRange(0, text.length))
3
Undo