2012-11-03 91 views
0

所以我有一個奇怪的方法在我正在瀏覽器應用程序的UIWebView中加載書籤。在書籤的UITableView的didSelectRowAtIndexPath方法,我有這樣的代碼:UIWebview是卸載url

NSUserDefaults *lString = [NSUserDefaults standardUserDefaults]; 
[lString setValue:[bookmarks objectAtIndex:indexPath.row] forKey:@"loString"]; 

,然後我有在的UITableView到它加載基於該代碼一個UIWebView另一個視圖控制器所選擇的對象模態。所以問題是我第一次點擊表格視圖對象時,UIWebview是空白的,然後第二次顯示我第一次點擊的URL。請幫忙! 謝謝, 邁克爾

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSUserDefaults *lString = [NSUserDefaults standardUserDefaults]; 
loadString = [lString valueForKey:@"loString"]; 
NSURL *url = [[NSURL alloc] initWithString:loadString]; 
NSURLRequest *togo = [[NSURLRequest alloc] initWithURL:url]; 
[webView loadRequest: togo]; 

// Do any additional setup after loading the view. 
} 

回答

0

的-loadRequest方法是異步的,這意味着它開始加載在另一個線程,而你的主線程的繼續執行。

所以第一次調用它時,它會顯示一個空白屏幕(因爲第一個請求仍在另一個線程中運行)。第二次,因爲第一個請求已經完成,它表明(而第二個請求在另一個線程中運行)。等等。

要在加載後立即使用URL內容刷新屏幕,您需要實現UIWebViewDelegate的-webViewDidFinishLoad方法。在這種方法中,你知道URL已經完成加載,所以如果你在那裏刷新Web視圖,它應該顯示內容。

+0

謝謝,我該怎麼做? – TheMlabTechGuy

+0

嗨,我試過了你的提示,但是我需要一種重新加載頁面一次的方法。 – TheMlabTechGuy

+0

您需要指定一個對象作爲您的UIWebView對象的委託。這個委託對象需要被你的應用程序或其他非視圖對象保留,所以它不會被垃圾收集。它需要被聲明爲符合UIWebViewDelegate協議。 您應該需要實現的唯一方法是'-webViewDidFinishLoad:'方法,該方法將作爲參數傳遞一個指向您的webView對象的指針。 在該方法中,你應該只需要調用: '[webView的setNeedsDisplay];' 以提醒webView的需要重新繪製系統。 – chapka