[解決済み】NSAttributedStringでクリック可能なリンクを作成するにはどうすればよいですか?
質問
の中でハイパーリンクをクリックできるようにするのは簡単なことです。
UITextView
. IBでビューに "detect links" チェックボックスを設定するだけで、HTTPリンクを検出し、ハイパーリンクに変えてくれます。
しかし、それでもユーザーが目にするのは"raw"リンクということになります。RTFファイルやHTMLでは、ユーザーが読める文字列を設定し、その後ろにリンクを設定することができます。
属性付きテキストをテキストビューに設置するのは簡単です(あるいは
UILabel
または
UITextField
ということです)。しかし、その属性付きテキストにリンクが含まれている場合、クリックすることはできません。
の中で、ユーザーが読めるテキストをクリック可能にする方法はありますか?
UITextView
,
UILabel
または
UITextField
?
SOではマークアップが異なりますが、大まかな内容は以下の通りです。私が欲しいのは、このようなテキストです。
このモーフは フェイスダンサー クリックするとアプリストアで表示されます。
これしかないんです。
このモーフはFace Dancerで生成されたものです。 http://example.com/facedancer をクリックすると、アプリストアでご覧いただけます。
解決方法は?
これは本当に便利なのですが、かなり多くの場所でこれを行う必要があったので、私のアプローチを簡単な拡張機能で包んで
NSMutableAttributedString
:
スウィフト3
extension NSMutableAttributedString {
public func setAsLink(textToFind:String, linkURL:String) -> Bool {
let foundRange = self.mutableString.range(of: textToFind)
if foundRange.location != NSNotFound {
self.addAttribute(.link, value: linkURL, range: foundRange)
return true
}
return false
}
}
スウィフト2
import Foundation
extension NSMutableAttributedString {
public func setAsLink(textToFind:String, linkURL:String) -> Bool {
let foundRange = self.mutableString.rangeOfString(textToFind)
if foundRange.location != NSNotFound {
self.addAttribute(NSLinkAttributeName, value: linkURL, range: foundRange)
return true
}
return false
}
}
使用例です。
let attributedString = NSMutableAttributedString(string:"I love stackoverflow!")
let linkWasSet = attributedString.setAsLink("stackoverflow", linkURL: "http://stackoverflow.com")
if linkWasSet {
// adjust more attributedString properties
}
オブジェクティブC
ちょうど純粋なObjective-Cのプロジェクトで同じことをしたいという要件にぶつかったので、Objective-Cのカテゴリを紹介します。
@interface NSMutableAttributedString (SetAsLinkSupport)
- (BOOL)setAsLink:(NSString*)textToFind linkURL:(NSString*)linkURL;
@end
@implementation NSMutableAttributedString (SetAsLinkSupport)
- (BOOL)setAsLink:(NSString*)textToFind linkURL:(NSString*)linkURL {
NSRange foundRange = [self.mutableString rangeOfString:textToFind];
if (foundRange.location != NSNotFound) {
[self addAttribute:NSLinkAttributeName value:linkURL range:foundRange];
return YES;
}
return NO;
}
@end
使用例です。
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:"I love stackoverflow!"];
BOOL linkWasSet = [attributedString setAsLink:@"stackoverflow" linkURL:@"http://stackoverflow.com"];
if (linkWasSet) {
// adjust more attributedString properties
}
関連
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み] EXC_CORPSE_NOTIFY シンボルのクラッシュが発生しました、追跡するには?
-
[解決済み] Cordova Camera iOSの問題。NOT_FOUND_ERR
-
[解決済み] なぜibtoolはexit code 255で失敗したのでしょうか?
-
[解決済み] Unwind segue - インスタンスメソッドのみ @IBAction を宣言でき、ボタンが Exit に接続しない
-
[解決済み] UIViewAlertForUnsatisfiableConstraintsでトラップする方法は?
-
[解決済み] リンクのように動作するHTMLボタンを作成する方法
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] App Storeのアプリと連動させる方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Xcode 10.2.1 Command PhaseScriptExecutionが0以外の終了コードで失敗した。
-
[解決済み] リンカーコマンドが終了コード 1 で失敗した(起動を確認するには -v を使用)、Xcode 8、Swift 3
-
[解決済み] 新しい Swift クラスの void 関数で予期しない非 void の戻り値が発生する。
-
[解決済み] 指定されたホスト名を持つサーバーが見つからなかった
-
[解決済み] このアクションは完了できませんでした。再試行 (-22421)
-
[解決済み] selector' の引数が '@objc' メソッド、プロパティ、またはイニシャライザを参照していない
-
[解決済み] swift3におけるセレクタ
-
[解決済み] ios8ではdidRegisterForRemoteNotificationsWithDeviceTokenは呼ばれないが、didRegister...Settingsは呼ばれる。
-
[解決済み] あなたのリクエストはエラーを発生させました。[newNullResponse]?
-
[解決済み] UIButtonのテキストに下線を引く