如何在UIWebView而不是Safari中打开UITextView Web链接?

时间:2009-08-20 11:30:55

标签: ios iphone uitextview iphone-sdk-3.0

我正在开发和iPhone 3.0应用程序。我正在尝试将UITextView中的Web链接打开到UIWebView而不是Safari。但仍然没有运气。

UITextView不可编辑,它可以完美地检测网页链接并在Safari中打开它们。

如何避免?如何获取该网址,以便我可以使用自己的UIWebView

3 个答案:

答案 0 :(得分:20)

这是一个老问题,但任何人都在寻找更新的方法。

将viewController分配给viewController的.m文件中的UITextView作为委托,并添加:

-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{

    //Do something with the URL
    NSLog(@"%@", URL);


    return NO;
}

答案 1 :(得分:7)

最简单的方法是覆盖UITextView上的webView:decidePolicyForNavigationAction:request:frame:decisionListener:方法,如下所示:

@interface UITextView (Override)
@end

@class WebView, WebFrame;
@protocol WebPolicyDecisionListener;

@implementation UITextView (Override)

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener
{
    NSLog(@"request: %@", request);
}
@end

这会影响您应用中的所有UITextView。如果您只在一个视图上需要这个,请创建一个子类并覆盖该方法。

注意:这在技术上是一个私有API,可以随时删除。无法通过公共API执行此操作。

编辑:从iOS 7.0开始,UITextViewDelegate引入了一种新方法来支持这一点。有关详细信息,请参见nihad的答案。

答案 2 :(得分:5)

使用Swift 3,Ext.define('Base.controller.WorkOrders', { config: { refs: { woView: 'woview', generalNotesContent: 'container#generalNotesContent', }, control:{ woView:{ activate: 'woViewActivate' } } }, woViewActivate: function(){ this.loadNotes(); }, loadNotes: function(){ var gNotesView = Ext.widget('notes'); Ext.Viewport.add(gNotesView); var html = "<div>My html</div>" this.getGeneralNotesContent().setHtml(html); var NotesHtml = this.getGeneralNotesContent(); this.getGeneralNotesContent().setHeight(NotesHtml.innerHtmlElement.dom.scrollHeight); //if it is needed extra height we can do this //var extraHeight= 70; //this.getGeneralNotesContent().setHeight(NotesHtml.innerHtmlElement.dom.scrollHeight+ extraHeight); gNotesView.show(); } 提供了textView(_:shouldInteractWith:in:interaction:)方法。 UITextViewDelegate有以下声明:

  

询问委托是否指定的文本视图应允许在给定的文本范围内与给定URL进行指定类型的用户交互。

textView(_:shouldInteractWith:in:interaction:)

以下代码显示了如何在optional func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool 中打开UITextView网络链接,而不是在Safari应用中打开它们:

SFSafariViewController