我有一个自定义的uitableviewcell,它有一个标签,我正在检测标签文本中的任何链接,如果存在,那么我会突出显示它。但问题是我想让链接可点击。但是当我点击链接时,会调用didSelectRowAtIndexPath并加载另一个页面。
我想要实现的是当我点击链接时(仅在链接上而不在单元格上),相应的网页必须打开而不是调用didSelectRowAtIndexPath。我搜索并找到了一些第三方库。但我的问题是,它可以在不使用第三方库的情况下实现吗?如果是这样,怎么办呢。
以下是我用来突出显示链接的代码
labelText.addAttribute(NSLinkAttributeName, value: "http://linktosite" , range: urlRange)
希望你能理解这个问题
提前致谢。
答案 0 :(得分:1)
您可以在iOS的didSelectRowAtIndexPath
委托方法中编写条件,好像UILabel
包含链接,然后打开网址或其他部分。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.labelText.text == @"Link")
{
//Open in safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:cell.labelText.text]];
}
else
{
}
}
或者您可以添加点击手势到标签&将URL打开为
cell.labelText.userInteractionEnabled = YES;
UITapGestureRecognizer *gestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openUrl:)];
gestureRec.numberOfTouchesRequired = 1;
gestureRec.numberOfTapsRequired = 1;
[cell.labelText addGestureRecognizer:gestureRec];
并实施行动方法
- (void)openUrl:(id)sender
{
UIGestureRecognizer *rec = (UIGestureRecognizer *)sender;
id hitLabel = [self.view hitTest:[rec locationInView:self.view] withEvent:UIEventTypeTouches];
if ([hitLabel isKindOfClass:[UILabel class]]) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:((UILabel *)hitLabel).text]];
}
}