現在、リンクをクリック可能にするために を使用してUITextView
いUITableViewCell
ますが、パフォーマンスが非常に低下しています。
でリンクを検出できるかどうか疑問に思っていました。NSString
リンクがある場合は を使用しUITextView
、それ以外の場合は を使用しUILabel
ます。
現在、リンクをクリック可能にするために を使用してUITextView
いUITableViewCell
ますが、パフォーマンスが非常に低下しています。
でリンクを検出できるかどうか疑問に思っていました。NSString
リンクがある場合は を使用しUITextView
、それ以外の場合は を使用しUILabel
ます。
絶対。NSDataDetectorを使用する(NSDataDetectorクラスリファレンス)
URLを検出するための正規表現に精通していると思います。そのため、セルでいずれかのタイプのビューを取得するには、メソッドUITableViewCell
から2つの異なるを返すだけです。tableView:cellForRowAtIndexPath:
これは次のようになります(テストされていないブラウザに入力されていることに注意してください)。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *dataString = // Get your string from the data model
// Simple pattern found here: http://regexlib.com/Search.aspx?k=URL
NSString *URLpattern = @"^http\\://[a-zA-Z0-9\-\.]+\\.[a-zA-Z]{2,3}(/\\S*)?$";
NSError *error = NULL;
NSRegularExpression *URLregex = [NSRegularExpression regularExpressionWithPattern:URLpattern
options:NSRegularExpressionCaseInsensitive
error: &error];
NSUInteger numberOfMatches = [URLregex numberOfMatchesInString:string
options:0
range:NSMakeRange(0, [string length])];
if ( numberOfMatches == 0 ) {
static NSString *PlainCellIdentifier = @"PlainCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
cell.textLabel.text = timeZoneWrapper.localeName;
}
else {
static NSString *FancyCellIdentifier = @"FancyCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
}
// Configure cell view with text view here
}
return cell;
}