2

Twitter などのリモート Web サービスからメッセージを受信する楽しみのためのアプリに取り組んでいます。これらのメッセージには URL:s が含まれている場合があり、これらをクリックできるようにしたいと考えています。どのアプローチが最適なのだろうか。NSLinkAttributeName を試しましたが、iOS では機能しません。透明なボタンを作成して、テキストビューの適切な場所の上に配置することは可能ですか? どうすればそれができますか?または、より良い/より簡単な方法はありますか? URL の位置と長さはさまざまです。

4

3 に答える 3

3

これには 2 つの良い方法があります。

1. CoreText、または TTTAtributedLabel のようなそれのラッパー

それが最も強力なソリューションです。Datadetectortypes をサポートしており (ただし、パフォーマンスを表示する前に独自の検出を行ったほうがよいでしょう)、比較的人気があります。

ただし、使用状況によっては、テーブルビューのスクロール パフォーマンスに影響を与える可能性があります。

2. IFTweetLabelのようにラベルの上にボタンを動的に配置する

それは簡単な解決策です。IFTweetLabel は基本的に UILabel のドロップインであり、そのままで非常に優れたパフォーマンスを発揮します。ただし、カスタマイズしすぎると、最終的には限界に達します。100% 常に完全に動作するわけではないことは言うまでもありません。YMMV。

于 2012-10-24T20:47:52.570 に答える
2

1 つのオプションは、 を使用することUIDataDetectorTypeLinkです。詳細については、このリンクを確認してください。

// Create textview, centering horizontally
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 10, 320, 50)];

// Set font, background and alignment
[textView setFont:[UIFont boldSystemFontOfSize:16]];
[textView setBackgroundColor:[UIColor blackColor]];
[textView setTextAlignment:UITextAlignmentCenter];

// Unfortunately the link will show as blue even with this setting
//  [textView setTextColor:[UIColor greenColor]];

// Edit and scrolling off  
[textView setEditable:NO];
[textView setScrollEnabled:NO];

// Set data type to specify URL/link
[textView setDataDetectorTypes:UIDataDetectorTypeLink];

// Set text as URL
[textView setText:@"text.com"];  

[self.view addSubview:textView];

他のいくつかのオプションは 、その中のUIWebviewURL のタッチを処理するデリゲートを使用しています。もう1つのオプションは派手なUILabelsです

あなたが尋ねた他の質問については、このHow to open a UITextView URL in UI Web View? を確認してください。カスタム UIDataDetectorTypes を作成する方法はありますか? フィルタを使用してUITextViewリンクの色を変更しますか?

于 2012-10-24T19:46:48.750 に答える
0

NSLinkAttributeNameは でタップ可能ですがUITextView、 ではタップできませんUILabeliOS 7+ 用であり、UITextView が(ストーリーボード内に) ある必要があることに注意してくださいSelectable

迅速なデモンストレーション:

let attributedText = NSMutableAttributedString(string: "Hello world")
attributedText.addAttribute(.link, value: URL(string: "https://example.com")!, range: NSRange(location: 0, length: attributedText.length))
textView.attributedText = attributedText
于 2018-03-22T06:51:14.127 に答える