2012-02-24 77 views
0

我有一個ViewBased應用程序。我在其中一個UIViewControllers上添加了一個UITableView。它顯示了數據,我實現了所有的委託方法等。我的問題是,當我想顯示detailView它只是沒有發生。我的代碼:如何在UIViewController上沒有NavigationController的情況下推送DetailView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     DetailViewController *detailViewController =[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil]; 

     NSLog(@"DidSelectRowAtIndexPath"); 

     // Pass the selected object to the new view controller. 
     [self.navigationController pushViewController:detailViewController animated:YES]; 
     [detailViewController release]; 
    } 

我知道我需要一個navigationController,但我沒有一個和我是不成功的嘗試以編程方式添加一個。我的appDelegate中沒有一個,所以我的問題是我需要添加一個來顯示詳細視圖?如果是的話,請給我一個代碼示例如何做到這一點。 如果不是,還有什麼其他方式?

我是iOS新手,所以我在這裏有點迷路。 請幫忙!

回答

1

要只爲這個細節視圖以編程方式添加一個導航控制器,你需要這樣的事:

UINavigationController * controller = [[UINavigationController alloc] initWithRootViewController:detailViewController]; 

[[detailViewController] release]; 

[self presentModalViewController: controller animated: YES]; 

如果你想使用pushViewController,你需要已經圍繞着你的觀點」導航控制器重新開始。

+0

非常感謝!這幫助我!有沒有像使用presentModalViewController一樣從樣本中將它從右向左推的方法? – iPhoneNoob 2012-02-24 23:05:30

+0

你可能會在這裏找到這樣的幫助:http://stackoverflow.com/questions/237310/how-can-i-change-the-animation-style-of-a-modal-uiviewcontroller – 2012-02-24 23:08:59

+0

謝謝!這幫助我很多! – iPhoneNoob 2012-02-24 23:26:23

0

您需要先添加導航控制器,然後您的主表成爲導航控制器的根視圖控制器,然後當您點擊表格中的一行時,將另一個視圖控制器推到導航堆棧上。

您的主表如何進入應用程序的第一個地方?如果您使用的是筆尖,則只需將舊視圖控制器添加爲導航控制器的子設備即可更改導航控制器的視圖控制器,這非常容易。

+0

你能告訴我在哪裏以及如何添加navC?我試圖添加它(請參閱我的代碼),但它不起作用。我沒有使用UITableViewController,也沒有在我的appDelegate中添加navC。我正在使用筆尖並嘗試添加navC,但不知道如何將它們連接在一起......: -/ – iPhoneNoob 2012-02-24 23:31:04

+0

是否是UITableViewController的主人?該UITableViewController如何顯示在第一位? – jsd 2012-02-25 04:30:45

0

您可以通過應用程序委託的application:didFinishLaunchingWithOptions:方法中的工作,像這樣以編程方式創建一個:

UITableViewController *tableViewController = [[[WhateverYourSubclassVCIsCalled alloc] init] autorelease]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:tableViewController]; 
window.rootViewController = navController; 
[window makeKeyAndVisible]; 
+0

我沒有使用UITableViewController。我將代表添加到我的ViewController中。我沒有'窗口'。這一切都在viewControllers中。有沒有辦法在不通過appDelegate的情況下向VC添加navControler? – iPhoneNoob 2012-02-24 23:28:48

+0

那麼,在這種情況下,只需使用您的子類名稱代替UITableViewController即可。而且你確實有一個窗口,不管你是否真的有處理它。我相信當前模板在應用程序委託中使用名稱「_window」作爲實例變量。 – lyricsboy 2012-02-24 23:34:53

+0

我想你正在考慮導航控制器和其他視圖控制器之間的關係。導航控制器被設計爲包含其他視圖控制器並通過推動和彈出它們來管理「堆棧」。所以你想要有一些類(通常是應用程序委託,或者間接通過XIB)創建並設置帶有自定義視圖控制器作爲其根的導航控制器。 – lyricsboy 2012-02-24 23:37:38

相關問題