在我的iPhone应用程序中,UITextView包含一个URL.我想在UIWebView中打开此URL而不是将其打开到safari中?我的UITextView包含一些数据和URL.在某些情况下,没有.URL可以不止一个.
谢谢桑迪
您可以按照以下步骤操作:
勾选UITextView
从Xib或Storyboard获取的以下属性.
或者为动态采取的textview写下这些.
textview.delegate=self; textview.selectable=YES; textView.dataDetectorTypes = UIDataDetectorTypeLink;
现在写下面的delegate
方法:
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { NSLog(@"URL: %@", URL); //You can do anything with the URL here (like open in other web view). return NO; }
我想你正在寻找那个.
UITextView能够检测URL并相应地嵌入超链接.您可以打开该选项:
myTextView.dataDetectorTypes = UIDataDetectorTypeLink;
然后,您需要配置您的应用程序以捕获此URL请求并让您的应用程序处理它.我在github上发布了一个样板类,它可以做到这一点,这可能是最简单的路线:http://github.com/nbuggia/Browser-View-Controller--iPhone-.
第一步是对UIApplication进行子类化,以便覆盖谁可以对'openUrl'请求采取行动.以下是该类的外观:
#import#import "MyAppDelegate.h" @interface MyApplication : UIApplication -(BOOL)openURL:(NSURL *)url; @end @implementation MyApplication -(BOOL)openURL:(NSURL *)url { BOOL couldWeOpenUrl = NO; NSString* scheme = [url.scheme lowercaseString]; if([scheme compare:@"http"] == NSOrderedSame || [scheme compare:@"https"] == NSOrderedSame) { // TODO - Update the cast below with the name of your AppDelegate couldWeOpenUrl = [(MyAppDelegate*)self.delegate openURL:url]; } if(!couldWeOpenUrl) { return [super openURL:url]; } else { return YES; } } @end
接下来,您需要更新main.m以指定MyApplication.h
为UIApplication类的bonified委托.打开main.m并更改此行:
int retVal = UIApplicationMain(argc, argv, nil, nil);
对此
int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil);
最后,您需要实现[(MyAppDelegate*)openURL:url]方法,让它按照您希望的URL进行操作.就像打开一个带有UIWebView的新视图控制器一样,并显示URL.你可以这样做:
- (BOOL)openURL:(NSURL*)url { BrowserViewController *bvc = [[BrowserViewController alloc] initWithUrls:url]; [self.navigationController pushViewController:bvc animated:YES]; [bvc release]; return YES; }
希望这对你有用.