当用户在UITextView中触摸自动检测的手机链接时,是否可以执行自定义操作.请不要建议使用UIWebView.
请不要只重复苹果课程中的文字参考 - 当然我已经读过了.
谢谢.
更新:从ios10,
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange interaction:(UITextItemInteraction)interaction;
从ios7和Later UITextView
有委托方法:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange *NS_DEPRECATED_IOS(7_0, 10_0, "Use textView:shouldInteractWithURL:inRange:forInteractionType: instead");*
拦截点击链接.这是最好的方法.
对于ios6和更早版本,一个很好的方法是通过子类化UIApplication
和覆盖-(BOOL)openURL:(NSURL *)url
@interface MyApplication : UIApplication { } @end @implementation MyApplication -(BOOL)openURL:(NSURL *)url{ if ([self.delegate openURL:url]) return YES; else return [super openURL:url]; } @end
您需要openURL:
在您的代理中实施.
现在,要让应用程序从您的新子类开始,请UIApplication
在项目中找到main.m文件.在这个引导你的应用程序的小文件中,通常有这一行:
int retVal = UIApplicationMain(argc, argv, nil, nil);
第三个参数是应用程序的类名.所以,将此行替换为:
int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);
这对我有用.
在iOS 7或更高版本中
您可以使用以下UITextView委托方法:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
如果用户点击或长按URL链接,则文本视图会调用此方法.此方法的实现是可选的.默认情况下,文本视图打开负责处理URL类型的应用程序并将URL传递给它.您可以使用此方法触发替代操作,例如在当前应用程序的Web视图中的URL处显示Web内容.
重要:
仅当文本视图可选但不可编辑时,文本视图中的链接才是交互式的.也就是说,如果UITextView的值为selectable属性为YES且isEditable属性为NO.
迅捷版:
您的标准UITextView设置应如下所示,不要忘记委托和dataDetectorTypes。
var textView = UITextView(x: 10, y: 10, width: CardWidth - 20, height: placeholderHeight) //This is my custom initializer textView.text = "dsfadsaf www.google.com" textView.selectable = true textView.dataDetectorTypes = UIDataDetectorTypes.Link textView.delegate = self addSubview(textView)
课程结束后,添加以下内容:
class myVC: UIViewController { //viewdidload and other stuff here } extension MainCard: UITextViewDelegate { func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool { //Do your stuff over here var webViewController = SVModalWebViewController(URL: URL) view.presentViewController(webViewController, animated: true, completion: nil) return false } }
对于Swift 3
textView.delegate = self extension MyTextView: UITextViewDelegate func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { GCITracking.sharedInstance.track(externalLink: URL) return true } }
或者目标是> = IOS 10
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool