如何在 swift 中使自定义 UITableViewCell 中的链接可点击

Posted

技术标签:

【中文标题】如何在 swift 中使自定义 UITableViewCell 中的链接可点击【英文标题】:How to make a link clickable in custom UITableViewCell in swift 【发布时间】:2015-07-27 05:11:59 【问题描述】:

我有一个自定义的 uitableviewcell,它有一个标签,我正在检测标签文本中的任何链接,如果存在,我会突出显示它。但问题是我想让链接可点击。但是当我点击链接 didSelectRowAtIndexPath 被调用并加载另一个页面。

我想要实现的是,当我单击链接时(仅在链接上而不是在单元格上)必须打开相应的网页,而不是调用 didSelectRowAtIndexPath。我搜索并找到了一些第三方库。但我的问题是,不使用第三方库可以实现吗?如果可以,怎么做。

这是我用来突出显示链接的代码

labelText.addAttribute(NSLinkAttributeName, value: "http://linktosite" , range: urlRange)

希望你能理解问题

提前致谢。

【问题讨论】:

【参考方案1】:

您可以在 iosdidSelectRowAtIndexPath 委托方法中编写条件,就像 UILabel 包含链接然后打开 URL 其他部分。

- (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]];


【讨论】:

标签中有文字和链接。我想在单击链接时打开链接并在单击单元格上的其他任何位置时加载新页面 让我们尝试第一个解决方案

以上是关于如何在 swift 中使自定义 UITableViewCell 中的链接可点击的主要内容,如果未能解决你的问题,请参考以下文章

从我们仓库中其他 Snowflake DB 派生的数据中使自定义表保持最新的最佳实践

如何使自定义单元格中的 UILabel 显示保存在 UITableView 中的更改

如何使自定义 UIButton 变暗

如何在 Swift 中使按钮具有圆形边框?

如何在 Swift 3 中使这个 UITableView 清晰(透明)

如何在 Swift 中使 iPhone 状态栏透明?