2009-05-28 133 views
1

我有一個基於導航控制器的應用程序下載一個RSS提要,並在一個TableView中的項目標題。該部分起作用。當我點擊文章標題時,我想將FeedArticleController的實例推送到導航堆棧上。 FeedArticleController loadView方法設置視圖(因爲我想學習如何以編程方式而不是使用IB)。這裏的loadView:UIWebView似乎沒有加載頁面

- (void)loadView { 
    UIView *view = [[UIView alloc] init]; 
    self.view = view; 

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    webView.delegate = self; 

    [view addSubview:webView]; 
} 

這有道理嗎? 現在,讓webView的實際加載的頁面,我有這樣的viewDidLoad方法:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; 
} 

然後,我有委託方法,webViewDidStartLoad和webViewDidFinishLoad。他們只是打印到NSLog。

我錯過了我如何構建和添加視圖?代理方法似乎在延遲後打印到日誌中,並且在webView實例化時線路上存在流量。所以,我認爲這是加載頁面,但沒有顯示?

謝謝你們。

回答

3

有尋找到這裏兩件事情:

  1. 設置Web視圖的autoresizingMaskUIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight使Web視圖調整大小時,其父被調整。這是因爲默認情況下,您創建的父UIView和UIWebView都具有歸零幀(0,0,0,0)。通過設置這一點,當父屏幕在屏幕上前調整大小時,網頁視圖將被調整大小以匹配。
  2. 不要使用單獨的UIView實例,只需將self.view設置爲您的UIWebView實例。

我推薦第二個選項,除非你真的需要你的控制器裏面的另一個視圖。另外,我應該在這裏指出你在上面的代碼片段中泄漏了UIView和UIWebView。這可能會簡化,但如果不是,則應在分配視圖後釋放視圖。以下是實施上述解決方案2的示例:

- (void) loadView 
{ 
    webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; 
    webView.delegate = self; // weak reference: doesn't retain self 
    self.view = webView;  // strong reference: retains webView 
    [webView release];   // release initial reference: now 'owned' through self.view 
} 
+0

感謝您的評論。我並不總是確定是否應該在創建它的方法或類的dealloc方法中釋放實例。 – Georges 2009-05-29 16:59:35