iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
Cocoaのテキストを扱うUI部品には高度な機能が用意されているということで、今回はハイパー・リンクの埋め込みを試してみた。
拡張(extension)を使ってNSAttributedStringにハイパー・リンクの埋め込み機能を追加する。
import Cocoa
extension NSAttributedString {
class func hyperlink(inString: String, aURL: NSURL) -> NSAttributedString {
let attrString = NSMutableAttributedString(string: inString)
let range = NSMakeRange(0, attrString.length)
attrString.beginEditing()
attrString.addAttribute(.link, value: aURL.absoluteString ?? "", range: range)
/* make the text appear in blue */
attrString.addAttribute(.foregroundColor, value: NSColor.blue, range:range)
/* next make the text appear with an underline */
attrString.addAttribute(.underlineStyle, value:NSNumber(value: NSUnderlineStyle.single.rawValue), range:range)
attrString.endEditing()
return attrString
}
}
NSTextFieldにハイパー・リンクが埋め込まれた文字列を設定する。
private func setHyperlink(inTextField: NSTextField) {
// both are needed, otherwise hyperlink won't accept mousedown
inTextField.allowsEditingTextAttributes = true
inTextField.isSelectable = true
if let url = NSURL(string: "http://www.bitz.co.jp/") {
let string = NSMutableAttributedString()
string.append(NSAttributedString.hyperlink(inString: "Bitz Co., Ltd.", aURL: url))
// set the attributed string to the NSTextField
inTextField.attributedStringValue = string
}
}
NSTextViewにハイパー・リンクが埋め込まれた文字列を設定する。
private func setHyperlink(inTextView: NSTextView) {
// create the attributed string
let string = NSMutableAttributedString()
// create the url and use it for our attributed string
if let url = NSURL(string: "http://www.bitz.co.jp/") {
string.append(NSAttributedString.hyperlink(inString: "Bitz Co., Ltd.", aURL: url))
// apply it to the NSTextView's text storage
inTextView.textStorage?.setAttributedString(string)
}
}
NSTextFieldとNSTextViewの内部の構成の違いから、NSTextViewはNSTextStorageに対してハイパー・リンク付き文字列を設定する。