Как открыть URL UITextView в веб-интерфейсе пользователя? - PullRequest
5 голосов
/ 12 октября 2009

В моем приложении для iPhone UITextView содержит URL. Я хочу открыть этот URL в UIWebView вместо того, чтобы открывать его в сафари Мой UITextView содержит некоторые данные вместе с URL. В некоторых случаях нет. из URL может быть более одного.

Спасибо Sandy

Ответы [ 3 ]

10 голосов
/ 24 января 2014

Вы можете выполнить следующие действия:

  1. Отметьте следующие свойства в UITextView, взятые из Xib или Раскадровки.

Check these properties of UITextView

ИЛИ запишите их для динамического просмотра текста.

textview.delegate=self;
textview.selectable=YES;
textView.dataDetectorTypes = UIDataDetectorTypeLink;
  1. Теперь напишите следующий 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;
}

Я думаю, вы ищете это.

9 голосов
/ 29 октября 2011

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. Откройте 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;
}

Надеюсь, это сработает для вас.

3 голосов
/ 12 октября 2009

Если у вас есть следующие экземпляры, которые также добавлены в ваш UIView:

UITextView *textView;
UIWebView *webView;

и textView содержит строку URL, вы можете загрузить содержимое URL в webView следующим образом:

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