【问题标题】:Clickable links in UITableView that open up SafariUITableView 中打开 Safari 的可点击链接
【发布时间】:2010-02-22 20:04:44
【问题描述】:

我正在开发一个 iPhone 应用程序,并且希望能够单击 UITableView 中的链接。当链接,并且只有链接被选中时,我希望 Safari 应用程序打开到选定的链接。关于如何做到这一点的任何建议?非常感谢!

【问题讨论】:

  • 您是在问如何完成整个过程,从创建可点击链接开始,还是只是在问如何让 Safari 打开?
  • 嗨,我需要知道如何在 UITableView 中使链接可点击,并在单击所述链接时打开 Safari 到该链接。感谢您的帮助。

标签: iphone objective-c uitableview


【解决方案1】:

您的问题有多种解决方案。

如果链接是单元格中唯一的对象,那么您可以调用UITableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath 函数从您的表格数据数组中收集链接,然后使用

[[UIApplication sharedApplication] openURL:myURL];

打开网址。

或者,您可以创建自己的 UITableCell 子类,其中包含没有图像或背景(只有文本)的自定义按钮(而不是圆角矩形按钮),因此它具有链接的外观(您甚至可以着色文本为蓝色,并在其下划线...)。当用户单击按钮时,您的处理函数将调用与上述相同的 openURL 函数。

如果您在每个单元格中有多个项目,上述方法效果最好(这就是您必须创建自定义单元格的原因......

【讨论】:

    【解决方案2】:

    一种天真的方法是将一个微小的 UIWebView 嵌入到每个单元格中。 UIWebView 有一个委托,可以让您知道何时单击链接,您可以实施该委托来启动 Safari 或导航到托管全屏 UIWebView 的新控制器。

    这种方法可能过于耗费资源,我自己也没有尝试过,但如果它确实有效,它将提供很大的灵活性。如果您尝试一下,很想知道结果。

    要在 Safari 中使用链接:

    NSURL *url = [NSURL URLWithString:@"http://stackoverflow.com"];
    if (![[UIApplication sharedApplication] openURL:url]) {
        NSLog(@"%@%@", @"Failed to open url:", [url description]);
    }
    

    【讨论】:

    • 这种方法的问题是计算单元格高度非常困难。在绘制之前无法获取 web view 的内容高度,在调用 heightForRow>cellForRow 之前无法绘制
    【解决方案3】:

    链接是否在 UITableView 中自己的行中?如果是这样,那么您可以在单击相应行时在 didSelectRowAtIndexPath 中处理它。

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多