【问题标题】:How to prevent the default browser from opening up when clicking on a link in a TextView?单击TextView中的链接时如何防止默认浏览器打开?
【发布时间】:2012-05-30 00:36:58
【问题描述】:

我有一个文本视图并包含一些链接。当我点击链接时,默认的 iOS 浏览器会打开。但我想为此目的打开我的自定义 Web 视图。我该怎么做?

【问题讨论】:

    标签: ios xcode ipad ios5


    【解决方案1】:

    点击按钮后,您可以使用UIWebView 调用 UIViewController,然后您可以使用loadRequest: method 加载您的 URL。

    【讨论】:

    • 没有按钮。它是文本视图中的一个简单链接,我点击它。
    【解决方案2】:

    我实际上已经按照奥斯卡的建议做了。问题是,您实际上只能为每个按钮分配一个“链接”。我实际上想更多地了解您的问题。你真的有大量的文本,在多行 UITextView 中显示多个 HTML 链接吗?您放入 UITextView 的文本是静态的(不变的)还是动态的(变化的)?

    无论哪种情况,我都建议您在应用中将带有链接的文本实现为本地 HTML 文件,并在您自己的 UIWebView 中打开它们。在您自己的 UIWebView 中点击的任何链接都将打开并保留在您的 WebView 中,而不是退出到标准浏览器中。这是我在多个场合都做过的事情,因为我使用本地存储的 HTML 来进行游戏指导等......在应用程序中使用。有一种方法可以使 HTML 页面具有透明背景,以允许后面的其他视图(如背景等)显示文本。稍后我将尝试对其进行编辑,为您提供必须添加到 HTML 文件中以允许透明 HTML 支持的行(如果这是您需要的,因为它会使它看起来/感觉更像默认的 UITextView)。

    这也是 Apple 在其 UITextView 类参考中给出的建议: http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextView_Class/Reference/UITextView.html

    【讨论】:

    • 我在我的文本视图中从 Twitter 获取推文。包含的文本是普通文本和链接的组合,也可能只是链接。它们是在运行时生成的。然后,如果我单击(点击)任何链接,默认浏览器就会打开。
    • 如果您正在获取推文并在您的文本视图中显示它们,那么您能否在显示它们之前不搜索推文中的链接并用您的自定义链接替换它们,就像我在我的回答?如果您这样做,那么当他们单击链接时您的应用程序将被调用,您可以在您的网络视图中显示它们吗?推文内容是隐藏的还是只读的?
    • 它是只读的。我可以在文本视图中查看推文中的链接。我可以点击它们。现在的痛苦是打开我自己的 Web 视图而不是默认浏览器。
    【解决方案3】:

    我不知道是否可以为覆盖默认处理程序的链接注册一个处理程序,但如果没有,那么您是否可以轻松更改链接?如果是这样,您可以通过以下链接启动您的应用:

    myappurlscheme://

    如果原始链接中有信息你需要将它传递给你的应用程序例如

    myappurlscheme://http.theoriginalurl.com/somestuff

    然后在您的应用程序中,您可以提取 http.theoriginalurl.com/somestuff 并将其传递给 UIWebVIew。

    这种技术通常用于启动应用程序,但由于您的应用程序已经在运行,它仍然可以工作并导致对您的应用程序委托的函数调用。

    http://mobiledevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

    【讨论】:

    • 问题是你只能在文本视图中点击链接。当你这样做时,你无法进行提取。所以不能传递给任何 Web 视图。所以这是我的问题。
    【解决方案4】:

    有一个 UITextViewDelegate 方法 - textView:shouldInteractWithURL:inRange: 返回一个 Bool 变量。

    因此,只需在此方法中创建您的自定义 UIWebView 并在此 webview 中加载 URL 并返回 No 以防止默认浏览器打开该链接。

    - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{ NSLog(@"%@",URL); UIStoryboard *storyboard = self.storyboard; SDWebViewController *webViewController = [storyboard instantiateViewControllerWithIdentifier:@"WebViewController"]; webViewController.strURL = [NSString stringWithFormat:@"%@",[URL absoluteString]]; [self.navigationController pushViewController:webViewController animated:YES]; return NO; }

    然后在SDWebViewController类对象中加载WebView中的URL。

    【讨论】:

      【解决方案5】:

      使用NSURLProtocol - 从中​​派生出您自己的类并实现相关方法(查看文档,它应该是不言自明的,如果没有任何问题请回到这里)。

      您将在您的应用代理的didFinishLaunchingWithOptions 中注册您的课程。

      当在文本视图中单击链接时,您将有机会拦截 url 并阻止浏览器启动。一旦你拦截了它,你就可以对它做你想做的事情——比如在UIWebView中加载它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        • 2012-06-11
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        相关资源
        最近更新 更多