2012-03-14 77 views
2

在我的應用程序中,我使用的UIWebView,我需要一些超鏈接電話號碼,電子郵件& URLs.I做了以下內容:iPhone:在Safari中的UIWebView開放的超級鏈接

- (void)viewDidLoad 
    { 
     credits.delegate=self; 
    } 



-(void)loadScreen 
{ 
scroll=[[UIScrollView alloc]init]; 
credits=[[UIWebView alloc]init]; 

NSString *Address = @"www.***.com/php/getjson.php?method="; 


    jmax = [NSURL URLWithString:Address]; 

    NSData *Data =[ NSData dataWithContentsOfURL:jmax]; 


    String = [[NSString alloc] initWithData:Data encoding:NSUTF8StringEncoding]; 

    NSString * creditsHtml = [NSString stringWithFormat:@" <font face=\"Arial\"><H3 align=\"center\"> Credits </H3> %@ <br>Phone%@</font>", String,phone]; 

    credits.userInteractionEnabled = YES; 
    credits.frame=CGRectMake(10, (frame1.size.height + 564), 300, 100); 
    credits.dataDetectorTypes=UIDataDetectorTypeAll; 
    credits loadHTMLString:creditsHtml baseURL:nil]; 

[scroll addSubview:credits]; 
} 



    -(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{ 


     NSString *urls= jmaxString; 

     NSURL *requestURL =[NSURL URLWithString: urls]; 
     if (([ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) 
      && (navigationType == UIWebViewNavigationTypeLinkClicked)) { 
      return ![ [ UIApplication sharedApplication ] openURL: requestURL ]; 
     } 

     return YES; 
    } 

編輯shouldStartLoadWithRequest:方法

-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{ 

    NSURL *requestURL =[request URL]; 

    if (([ [ requestURL scheme ] isEqualToString: @"http" ] || [ [ requestURL scheme ] isEqualToString: @"https" ] || [ [ requestURL scheme ] isEqualToString: @"mailto" ]) 
     && (navigationType == UIWebViewNavigationTypeLinkClicked)) { 
     return ![ [ UIApplication sharedApplication ] openURL: requestURL ]; 
    } 
    NSLog(@"URL %@",requestURL); 


    return YES; 
} 

了錯誤NSURL *requestURL =[request URL];Expected ; at the end & Extraneous ')' before ';'

+0

如果換成'的OpenURL會發生什麼創建你的WebView學分低於該行:requestURL'用'的OpenURL:[requestURL URL]'? – Zakaria 2012-03-14 13:55:12

+0

對不起,我忘記提到我的shouldStartLoadWithRequest:函數沒有被調用 – nithin 2012-03-14 13:59:05

+0

請問,你可以發佈全班?我懷疑你忘了實現'UIWebViewDelegate'協議^^ – Zakaria 2012-03-14 14:05:15

回答

1

你是在loadScreen函數中分配/初始化UIWebView的一個新對象,而不設置它的委託,因爲你假設你在viewDidLoad中做了這個。你必須在定義實例「credits」後設置委託。

+0

現在感謝-webView:shouldStartLoadWithRequest:導航類型:被調用,但我知道我在那裏定義的是不正確的。從其他一些問題中發現這個代碼,但在'請求URL'錯誤'NSURL * url = [request URL]; if(UIWebViewNavigationTypeLinkClicked == navigationType) {[UIApplication sharedApplication] openURL:url];如果(UIWebViewNavigationTypeLinkClicked == navigationType) return NO; } – nithin 2012-03-15 05:12:40

+0

僅當用戶點擊行(UIWebViewNavigationTypeLinkClicked)時才返回NO,這會讓您的應用在Safari中打開網址。 – 2012-03-15 05:23:21

0

這廁所ks喜歡this answered question的副本。

如果您的-webView:shouldStartLoadWithRequest:navigationType:方法根本沒有被調用,掛鉤您的委託存在問題 - 我們無法在沒有看到更多工作的情況下進一步診斷它。 (你確定它沒有被調用?在方法體的頂部粘貼一個NSLog或者在調試器中放置一個斷點,如果你不是這樣的話)。

另外,無論你是否剝離了太多的興趣在發佈該方法的正文時,或者在傳入的參數與確定要在Safari中打開哪些URL的邏輯之間沒有關聯。我認爲你的意思是測試用戶點擊的鏈接?這在request參數中。

+0

我爲你的柔和性添加了一些代碼。我想打開我在Safari中點擊的鏈接。請幫助... – nithin 2012-03-15 04:30:43

+1

如果你的'-loadScreen'在你的'-viewDidLoad'之後被調用,那麼你的委託不是掛鉤 - viewDidLoad將委託設置爲「UIWebView」的一個實例(或者,如果此時'credits'爲零,則不執行任何操作),然後在loadScreen中創建另一個實例。除非您設置新實例的委託,否則爲零。 – rickster 2012-03-15 04:47:10

1

只是貼在那裏你在loadScreen方法

credits=[[UIWebView alloc]init]; 
credits.delegate=self; //Add this line