2009-08-30 54 views
0

我是iPhone開發的新手,有一個問題,最終有助於理解這個概念。UIViewControllers和UIWebView

基本上,我有UIViewController加載了一堆東西的視圖。現在我想要當用戶點擊一個按鈕時,加載一個不同的視圖,這恰好是一個webView。現在,我希望weview根據在原始視圖中按下哪個按鈕來加載不同的url。

我該如何去做這件事?基本上在我的腦海,我想我可以加載並按下按鈕時交換意見,像這樣:

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSString *selectedLink = [valuesForSection objectAtIndex:row]; 

    NSString *urlAddress = @"http://www.google.com"; 

    //Create a URL object. 
    NSURL *url = [NSURL URLWithString:urlAddress]; 

    //URL Requst Object 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 

    //Load the request in the UIWebView. 
    [webView loadRequest:requestObj]; 

    [self.view removeFromSuperview]; 
    [self.view insertSubview:webView atIndex:0]; 
}

這是做這件事的正確方法嗎?或者我如何去做這件事?

回答

1

這將是我會這樣做的方式,是的。創建一個UIWebView,並根據選定的單元格,使用loadRequest:將NSURLRequest加載到視圖中。它的優點是不需要爲每個單元構建單獨的Web視圖,也不需要異步。

但是,我不一定會刪除self.view從其超級視圖,每當一個單元格被點擊;相反,我會彈出一個模式視圖控制器(presentModalViewController:animated:)與Web視圖作爲其視圖,或者我推新控制器到導航控制器堆棧(pushViewController:animated:)。這是一個更平滑的過渡,對用戶來說會更好。

編輯(回覆評論):是的,最好有另一個控制器,而不是交換視圖。做removeFromSuperviewaddSubview:保持在同一個控制器中的兩個視圖,但結果將使你的代碼更難以管理(一個控制器將處理兩個視圖),並有更糟的用戶體驗(沒有轉換,就像內置的一個導航控制器推)。

爲了做好這方面的推動,你應該:

  • 建立一個導航控制器爲你現有的視圖控制器
  • 當你需要創建的UIViewController的新實例,其視圖設置爲UIWebView的創建,並通過調用你的HTML
  • 推新視圖控制器到從舊視圖控制器導航控制器堆棧加載:
[self.navigationController pushViewController:newViewController animated:YES];
+0

你能告訴我你將如何實現pushviewcontroller?但是說過你說過,有另一個控制器而不僅僅是一個視圖會更好? – Doz 2009-08-30 10:52:51