2011-02-24 76 views
2

我是新手,因爲我來自C++和Perl背景。試圖從書本中學習,但他們錯過了Objective-C的一些核心概念。我需要這個代碼一些幫助拉網頁:iPad iPhone:從另一個視圖控制器類調用Webview

RootViewController.m

- (void)fetchWebsite:(NSString*)website{ 
    NSLog(@"address: %@", website); 

    NSString *urlAddress = website; 
    NSURL *url = [NSURL URLWithString:urlAddress]; 
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [webImageDisplay loadRequest:requestObj]; 
    [webImageDisplay release]; 
} 

- (void)viewDidLoad { 
    [self fetchWebsite:@"website here"]; 
    [super viewDidLoad]; 
} 

此代碼工作得很好,但我在遇到麻煩是從另一個類調用此方法,如代碼如下所示:

我正確調用從這樣的第二視圖控制器詳細視圖控制器:

SubViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic may go here. Create and push another view controller. 
    switch (indexPath.row) { 
     case 0: { 
      AnotherViewController *cViewController = [[AnotherViewController alloc] initWithNibName:@"AnotherViewController" bundle:nil]; 
      cController.contentSizeForViewInPopover = CGSizeMake(320, 350); 
      [self.navigationController pushViewController:cViewController animated:YES]; 
      [cViewController release]; 
      break; 
     } 
     case 1: { 
      break; 
     } 
    } 
} 

然後,我有第三個視圖控制器,有一個新的網頁,我想要顯示在web視圖上的鏈接。當我在這裏調用方法來訪問RootViewController中的函數時,它似乎沒有迴應。

AnotherViewController.m

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

    NSString *itemRequested = [conusItems objectAtIndex:indexPath.row]; 
    NSLog(@"logging: %@", itemRequested); 

    RootViewController *parent = [[RootViewController alloc] init]; 
    [parent fetchWebsite:@"another website here"]; 

    [itemRequested release]; 

} 

我點擊上表視圖按鈕,我看到的代碼被稱爲與的NSLog的RootViewController的,但它似乎並沒有顯示新頁。沒有錯誤或警告,任何想法?謝謝

回答

1

如果我願意,如果將Web視圖作爲自己的視圖控制器旋轉,那麼您的生活將會變得更加輕鬆,並且您的應用程序將更加靈活。

真正的問題是你是不是導航到你的Web視圖控制器

機會是代碼看上去就像這樣(你可能無法正確初始化。):

MyWebViewController *webVC = [[MyWebViewController alloc] initWithNibName:@"MyWebViewContorller" bundle:nil]; 
webVC.address = @"whatever"; 
[self.navigationController pushViewController:webVC animated:YES]; 
[webVC release]; 
0

有幾件事情在這裏值得注意。

  • 在didSelectRowAtIndexPath中,您正在創建一個視圖控制器,但不會顯示它,因此沒有可見的副作用。做呈現從表視圖中的「詳細信息」視圖控制器典型的事情是這樣的:

MenuItemOrderVC *vc = [[MenuItemOrderVC alloc] initWithNibName:@"MenuItemOrderVC" bundle:nil]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

這將創建視圖控制器類的新實例,並通過推動以呈現其導航控制器的堆疊。這是顯示詳細視圖的常用方式。

如果你想要做的是真正將數據呈現在已存在的另一個視圖控制器上(並且此時被隱藏?),那麼你不應該分配一個新的RootViewController(給定名稱,你可能不應該創建多個,通常「根」視圖控制器是VC堆棧的基礎,並且只有一個存在於整個應用程序中,但這不是一條硬性規則)。相反,您需要一種方法來獲取指向已存在的RootViewController的對象指針。

你需要無論是從視圖控制器傳下RootViewController的對象視圖控制器,或把它在一些全局訪問的地方,比如你的應用程序委託子類,做這樣的事情:

MyAppDelegate *appDel = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; 
RootViewController *rvc = appDel.rootViewController; 

如果你可以評論你正在考慮的這兩個選項中的哪一個,我可以給出更直接的答案。

+0

對不起因爲沒有詳細說明。我試圖做到這一點http://mobiforge.com/designing/story/using-popoverview-ipad-app-development但第三視圖控制器在它似乎並不能正確調用從根控制器的webview拉起新一頁。 – 2011-02-24 19:34:33

相關問題