web-dev-qa-db-ja.com

UILabelおよびNSLinkAttributeName:リンクはクリックできません

属性付き文字列をNSLinkAttributeNameで使用して、iOS 7プロジェクト内のUILabelインスタンス内にクリック可能なリンクを作成します。これは、外部ライブラリを使用せずに最終的に可能になります。

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          url, NSLinkAttributeName, nil];

文字列に属性を適用すると、テキストに青と下線が表示されますが、クリック/タップでは何も起こりません。ラベルのユーザー操作が有効になっています。誰もこれを行う方法を知っていますか?ありがとう!

34
max.mustermann

私は今、自分の質問に答えることができます:UITextViewの代わりにUILabelを使用しています。ラベルのように見えるようにUITextViewをフォーマットし、追加しました:

UITextView *textView = [[UITextView alloc] init];
textView.scrollEnabled = NO;
textView.editable = NO;
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
textView.delegate = self;

デリゲートを設定することを忘れないでください、UITextViewDelegateを実装する必要があります!次に、デリゲートメソッドを実装します。

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange
{
     return YES;
}

これにより、クリック/タップに関する質問の属性文字列から提供されたNSURL- instanceが自動的に開きます。

要確認:これはiOS 7でのみ機能します。レガシーサポートには外部ライブラリが必要です

UPDATE:

UITextViewsをラベルのように振る舞わせることは、結局は完全に混乱し、iOSの恐ろしい振る舞いにつまずきました。私は TTTAttributedLabel ライブラリを使用することになりました。これは単に素晴らしいものであり、UITextViewsの代わりにラベルを使用することができました。

48
max.mustermann