3

文字列があります (例: 「これは、特定のhttp://goo.gl/45hz Web アドレスを含むテキストです」)。文字列内にある場合はすべての URL を検索し、アドレスがタップ可能になるように文字列を何らかの方法で変換する必要があり (ユーザーがタップするとサファリが開きます)、理想的にはラベルに URL を含む文字列全体を表示する必要があります (可能な場合)。 .

これをどのように達成できるか知っている人はいますか?

4

6 に答える 6

2

を使用NSRange して最初の を検索し、http://その場所から の前のテキストを破棄しhttp://、最後にスペースを使用して残りの文字列を分離し、URL を含む残りの文字列の最初の部分を取得できます。

NSString *givenStr = @"This is some text with specific http://goo.gl/45hz web address in it";
NSRange range = [givenStr rangeOfString:@"http://" options:NSCaseInsensitiveSearch];


if (range.location != NSNotFound) {

  NSString *urlString = [givenStr substringFromIndex:range.location]; 
   // urlString="http://goo.gl/45hz web address in it"

  NSArray *urlStrArray = [urlString componentsSeparatedByString:@" "];

  NSURL *finalURL=[NSURL URLWithString:[urlStrArray objectAtIndex:0]];
   // [urlStrArray objectAtIndex:0]="http://goog.gl/45hz"
}

@calampunayが言ったようにURLをクリック可能にするには、プレーンテキストのみを表示するため、UITextView代わりに使用する必要があります。UILabelUILabel

于 2013-04-23T14:57:43.237 に答える
1

UITextViewの代わりにa を使用できますUILabel。URL を検出するには、プロパティを設定editableしてから変更します。NO@property(nonatomic) UIDataDetectorTypes dataDetectorTypes

于 2013-04-23T14:50:26.793 に答える
1

文字列内のすべての URL を検索するには

NSError *error = NULL;

NSString *string = @"This is some text with specific http://goo.gl/45hz web adress in it";
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
NSArray *matches = [detector matchesInString:string
                                     options:0
                                       range:NSMakeRange(0, [string length])];
for (NSTextCheckingResult *match in matches) {
    if ([match resultType] == NSTextCheckingTypeLink) {
        NSURL *url = [match URL];
        NSLog(@"url...%@", url);
    }
}
于 2013-04-23T14:50:52.003 に答える
0

これが UI ラベルからのものである場合は TTTAttributedLabel を使用します - https://github.com/mattt/TTTAttributedLabel

私たちにとって素晴らしい作品です。

于 2013-04-23T17:26:21.850 に答える