2009-10-12 8 views

Odpowiedz

3

Zakładając masz następujące przypadki, które są dodawane również do UIView:

UITextView *textView; 
UIWebView *webView; 

i TextView zawiera ciąg URL, można załadować zawartości URL do Webview , w następujący sposób:

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

Dzięki za pythonquick odpowiedzi, ale mam do czynienia z inną sytuacją w moim przypadku UITextView zawiera niektóre dane tekstowe wraz z adresem URL, w niektórych przypadkach liczba adresów URL może być większa niż jeden. – sandy

+0

OK, więc jeśli masz więcej niż jeden URL w tekście UITextView, co stanie się z UIWebView? W jakich okolicznościach UIWebView powinien załadować adres URL? – pythonquick

9

UITextView ma możliwość wykrywania adresów URL i osadzania hiperłączy odpowiednio. Możesz włączyć tę opcję w:

myTextView.dataDetectorTypes = UIDataDetectorTypeLink; 

Następnie musisz skonfigurować swoją aplikację, aby uwięzić to żądanie URL i pozwolić aplikacji go obsłużyć. Wydałem na Githubie klasę na tablicy, która to robi, co może być najłatwiejszą drogą: http://github.com/nbuggia/Browser-View-Controller--iPhone-.

Pierwszym krokiem jest zastosowanie UIApplication klasy podrzędnej, aby można było przesłonić, kto może podjąć działanie na żądanie "openUrl". Oto, co może wyglądać, że klasa jak:

#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 

Następnie trzeba zaktualizować main.m określić MyApplication.h jak będąc bonified delegat dla swojej klasy UIApplication. Otwarte main.m i zmienić linię:

int retVal = UIApplicationMain(argc, argv, nil, nil); 

do tego

int retVal = UIApplicationMain(argc, argv, @"MyApplication", nil); 

Wreszcie, trzeba wdrożyć [(MyAppDelegate *) OpenURL: URL] metody, aby to zrobić cokolwiek byś podobnie jak z adresem URL. Jak może otworzyć nowy kontroler widoku z UIWebView w nim i pokazać adres URL. Możesz zrobić coś takiego:

- (BOOL)openURL:(NSURL*)url 
{ 
    BrowserViewController *bvc = [[BrowserViewController alloc] initWithUrls:url]; 
    [self.navigationController pushViewController:bvc animated:YES]; 
    [bvc release]; 

    return YES; 
} 

Mam nadzieję, że to powinno zadziałać.

+0

bardzo szczegółowo. Idę spróbować. Wielkie dzięki –

+0

Naprawdę użyteczne, dzięki. Ale w jaki sposób możesz zarządzać różnymi widokami implementującymi hiperlinki? Mam na myśli, w twoim przykładzie, w AppDelegate implementujesz: 'BrowserViewController * bvc = [[BrowserViewController alloc] initWithUrls: url]; [self.navigationController pushViewController: animacja bvc: TAK]; ' , ponieważ istnieje tylko jeden widok. Ale co, jeśli nazwiesz metodę 'openURL' z różnych widoków w aplikacji? – yassassin

+0

@yassassin - zakres AppDelegate dotyczy całej aplikacji, więc przesłonięcie będzie dostępne wszędzie. Istnieje przeciążenie metody, które pozwala na zastąpienie tego zachowania, jeśli nadal chcesz mieć możliwość otwierania niektórych łączy w safari: 'forceOpenInSafari: (BOOL) forceOpenInSafari'. –

10

można wykonać następujące kroki:

  1. Tick na następujących właściwości w UITextView pobranych z XIB lub ujęć.

Check these properties of UITextView

lub napisać je dla TextView podjętej dynamicznie.

textview.delegate=self; 
textview.selectable=YES; 
textView.dataDetectorTypes = UIDataDetectorTypeLink; 
  1. Teraz wpisz poniżej delegate metody:
-(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; 
} 

myślę szukasz tego.

+0

Och Człowieku jesteś niesamowity, że uratowałeś mój dzień – Mashhadi

+0

Najlepsze! Dziękuję Ci – brbgyn

Powiązane problemy