2011-08-02 147 views
0

我想推送根視圖控制器。爲什麼這個代碼不工作?如何推送根視圖控制器?

RootController *rootController = [[RootController alloc]initWithStyle:UITableViewStylePlain];    
[self.navigationController pushViewController:rootController animated:YES]; 
[rootController release]; 

我以前用過addSubview。

- (void)cancel { 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)viewDidLoad { // this is root view controller 
    [super viewDidLoad]; 

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)]; 
    self.navigationItem.leftBarButtonItem = cancelButton; 
    [cancelButton release];  
} 

RootController *rootController = [[RootController alloc]initWithStyle:UITableViewStylePlain];    
UINavigationController *aNavigationController = [[UINavigationController alloc]initWithRootViewController:rootController]; 
self.naviController = aNavigationController; 
[aNavigationController release]; 
[rootController release]; 
[self.view addSubview:[naviController view]]; 

而且我在導航欄中添加了取消按鈕以返回上一個視圖。它不起作用。 所以,我想推,而不是添加。

+1

我們需要更多的上下文。怎麼了?期望什麼?你還在做什麼? – Moshe

+0

http://stackoverflow.com/questions/6909619/how-can-i-go-back-to-the-previous-view-from-root-view這是我問的問題鏈接。 – user698200

+0

你用什麼代碼回到前一個視圖? 「它不起作用」是什麼意思?什麼都沒發生?崩潰?設備開始吸菸? – Caleb

回答

1

您使用

initWithRootViewController: 

方法設置在一個UINavigationController根控制器。所以,你的做法是正確的。我建議你檢查self.view並確保它不是nil

編輯:您的評論後

您需要定義爲您的UINavigationController正常工作根視圖控制器;從UINavigationController reference

每個導航堆棧必須至少有一個視圖控制器充當根。

所以你不能刪除根視圖控制器。可能的話,把事情的工作,只要你喜歡,你應該創建作爲你不改變,然後推導航堆棧上的RootViewController的根視圖控制器使用額外的視圖控制器,然後啪會工作:

UIViewController *baseController = [[UIViewController alloc] initWithStyle:UITableViewStylePlain];    
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:baseController]; 
self.naviController = aNavigationController; 
[aNavigationController release]; 
[baseController release]; 
[self.view addSubview:[naviController view]]; 

RootController *rootController = [[RootController alloc] initWithStyle:UITableViewStylePlain];    
[self.navigationController pushViewController:rootController animated:YES]; 
[rootController release]; 

公告我首先定義了一個簡單的UIViewController作爲根視圖控制器,然後將控制器放到它上面。

一旦你這樣做,如果你像你一樣添加取消按鈕,它將從導航堆棧彈出rootViewController。

後最後的評論:

如果我理解你的權利,取消按鈕點擊的時候,你想獲得完全擺脫的UINavigationController的。

在這種情況下,使用下面的代碼爲cancel

- (void)cancel { 
    [self.navigationController.view removeFromSuperview]; 
} 

如果這個猜測是正確的,記住,因爲你沒有保持到導航控制器的任何引用,它會被釋放,並與它是你實例化的所有視圖控制器。

如果不是完全移除的UINavigationController,你會SimPy中隱藏導航欄,然後彈出rootController後,致電:

setNavigationBarHidden:animated 
+0

代碼的第二部分是我之前做的。它運行良好。我想要做的是更改該代碼推送,因爲取消按鈕不起作用。 – user698200

+0

在執行pushViewController之前,我必須先執行initWithRooViewController嗎? – user698200

+0

問題是,我甚至不推送根視圖控制器。彈出它是下一個問題。 – user698200

相關問題