2012-01-08 74 views
0

作爲理解Cocoa/Cocoa Touch API的小型項目,我一直在研究一個小型瀏覽器。我已經設法進行一個簡單的設計,其中有後退/前進/重新加載按鈕,地址欄本身和連接按鈕(我必須弄清楚另一點,如何修改鍵盤以獲得「Go」 。按鈕代替常規的回報在瀏覽器設置中使用/修改UITextField的問題

我現在的問題是,我的通用連接按鈕的功能如下:

-(IBAction)connect:(id)sender 
{ 
    NSURL *url = [NSURL URLWithString:address.text]; //address is the address bar 
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url]; 
    [webView loadRequest:request]; 
    [address resignFirstResponder]; //kill the address entry keyboard 
} 

然而,出於某種原因,該URL只有同時具備「HTTP理解://'在它前面,只需輸入'google.com'並點擊Connect按鈕不會執行任何操作。我認爲這是NSURL類或UIWebView的一個潛在問題,但是API文檔並不是特別有用次,而我只是無法弄清楚哪個。我覺得在地址欄的文本屬性的前面自動添加'http://'可能是一個糟糕的主意,如果需要'https://'而不是另一方面(儘管另一方面,一個正常的網站通常會中繼到一個安全的協議,但事實並非總是如此)。

我也有後退和前進按鈕的問題,他們沒有更新地址字段的地址。這是可以理解的,因爲地址欄並不直接綁定到WebView(也許有一部分UIWebView能夠做到這一點,我還沒有遇到過),我還沒有想出一種方法來更新地址欄顯示新的URL。我注意到,有UIWebViewDelegate方法,其中包括諸如webViewDidStartLoad,但我不完全知道如何正確使用這些東西。我已經嘗試使用[webView isLoading]布爾值作爲測試,然後相應地修改地址欄的URL,但它似乎無效,可能是由於緩存或類似的東西。

如果我還沒有詳細闡述某些事情或者這些問題已經在這裏得到解答,請原諒我;我做了一個快速搜索,並在網上瀏覽了一下,只是在遇到任何關於做什麼的建議時失敗。正如我所說的,蘋果的API文檔雖然非常深,但有時使用起來會有些尷尬。如果您對我的目標有什麼疑問,我一定會盡力回答。

回答

0

NSURL是非常挑剔的,將返回nil對於任何不解析爲有效網址:

NSURL URLWithString:方法的文檔:

URLString

的字符串用來初始化NSURL對象。 必須是符合RFC 2396一個URL這種方法根據的RFC 1738和1808

下面是RFC 2396鏈接解析URLString。

要提取當前加載的地址,你可以使用UIWebViewDelegate webViewDidFinishLoading:委託方法來提取當前URL和更新您的文本字段:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    textField.text = webView.request.URL.absoluteString; 
}