如何在UI Web View中打开UITextView URL?

时间:2009-10-12 15:41:27

标签: iphone url uiwebview uitextview

在我的iPhone应用程序中,UITextView包含一个URL。我想在UIWebView中打开此URL而不是将其打开到safari中? 我的UITextView包含一些数据和URL。在某些情况下,没有。 URL可以不止一个。

由于 沙

3 个答案:

答案 0 :(得分:10)

您可以按照以下步骤操作:

  1. 勾选来自Xib或Storyboard的UITextView中的以下属性。
  2. Check these properties of UITextView

    或者为动态拍摄的textview写下这些。

    textview.delegate=self;
    textview.selectable=YES;
    textView.dataDetectorTypes = UIDataDetectorTypeLink;
    
    1. 现在编写以下delegate方法:
    2. -(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;
      }
      

      我认为你正在寻找它。

答案 1 :(得分:9)

UITextView能够检测URL并相应地嵌入超链接。您可以在以下位置启用该选项:

myTextView.dataDetectorTypes = UIDataDetectorTypeLink;

然后,您需要配置应用程序以捕获此URL请求,并让您的应用程序处理它。我在github上发布了一个样板类来执行此操作,这可能是最简单的路径:http://github.com/nbuggia/Browser-View-Controller--iPhone-

第一步是对UIApplication进行子类化,以便覆盖谁可以对'openUrl'请求采取行动。这是该课程的样子:

#import <UIKit/UIKit.h>
#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;
}

希望这应该适合你。

答案 2 :(得分:3)

假设您有以下实例,这些实例也会添加到您的UIView中:

UITextView *textView;
UIWebView *webView;

和textView包含URL字符串,您可以将URL的内容加载到webView中,如下所示:

NSURL *url = [NSURL URLWithString:textView.text];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[webView loadRequest:req];