我正在尝试为UITextView中的内容创建自定义数据检测器。我希望能够做到这样的事情:
tv.dataDetectorTypes = UIDataDetectorTypeAll;
但是我想使用基于以下正则表达式的自定义UIDataDetector而不是UIDataDetectorTypeAll:
NSError *error = nil;
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"(ID: [0-9]+)"
options:NSRegularExpressionCaseInsensitive
error:&error];
我还希望检测到的ID是一个链接,它将带有URL + ID组合(http://www.stack.com?id)的UIWebView推送到导航堆栈。应该只有一个id。有什么想法吗?
谢谢!
答案 0 :(得分:2)
这花了我一整天,我终于找到并修改了这个Ray Wenderlich解决方案。显然,这是iOS 7中一个非常模糊的新功能。
- (NSAttributedString *)makeAttributedAbstract:(NSString*)str
{
NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:str];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(PMID: [0-9]+)" options:kNilOptions error:nil];
NSRange range = NSMakeRange(0, str.length);
[regex enumerateMatchesInString:str options:kNilOptions range:range usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSRange subStringRange = [result rangeAtIndex:1];
[mutableAttributedString addAttribute:NSLinkAttributeName value:@"pmid://" range:subStringRange];
}];
return (NSAttributedString*)mutableAttributedString;
}
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
if ([[URL scheme] isEqualToString:@"pmid"]) {
NSString *pmid = [NSString stringWithFormat:@"http://www.ncbi.nlm.nih.gov/pubmed/%@", [self.sql getPmidForId:self.abstractId] ];
NSURL *url = [NSURL URLWithString:pmid];
NSLog(@"pmid: %@", url);
[self pushWebViewWithURL:url];
return NO;
}
return YES; // let the system open this URL
}
http://www.raywenderlich.com/48001/easily-overlooked-new-features-ios-7#textViewLinks
答案 1 :(得分:0)
我认为您必须解决此问题,因为NSDataDetector仅限于预设。