文字列があります (例: 「これは、特定のhttp://goo.gl/45hz Web アドレスを含むテキストです」)。文字列内にある場合はすべての URL を検索し、アドレスがタップ可能になるように文字列を何らかの方法で変換する必要があり (ユーザーがタップするとサファリが開きます)、理想的にはラベルに URL を含む文字列全体を表示する必要があります (可能な場合)。 .
これをどのように達成できるか知っている人はいますか?
文字列があります (例: 「これは、特定のhttp://goo.gl/45hz Web アドレスを含むテキストです」)。文字列内にある場合はすべての URL を検索し、アドレスがタップ可能になるように文字列を何らかの方法で変換する必要があり (ユーザーがタップするとサファリが開きます)、理想的にはラベルに URL を含む文字列全体を表示する必要があります (可能な場合)。 .
これをどのように達成できるか知っている人はいますか?
を使用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
代わりに使用する必要があります。UILabel
UILabel
UITextView
の代わりにa を使用できますUILabel
。URL を検出するには、プロパティを設定editable
してから変更します。NO
@property(nonatomic) UIDataDetectorTypes dataDetectorTypes
文字列内のすべての 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);
}
}
これが UI ラベルからのものである場合は TTTAttributedLabel を使用します - https://github.com/mattt/TTTAttributedLabel
私たちにとって素晴らしい作品です。