我正在开发和iPhone 3.0应用程序。我正在尝试将UITextView中的Web链接打开到UIWebView而不是Safari。但仍然没有运气。
UITextView
不可编辑,它可以完美地检测网页链接并在Safari中打开它们。
如何避免?如何获取该网址,以便我可以使用自己的UIWebView
?
答案 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