2

我正在使用推送通知。我試圖在通知中的操作按鈕被點擊時在navigationController中創建並推送一個DetailView。但navigationController是零。我怎樣才能把那個DetailView放在navigationController中?我想在navigationController中推入RootViewController,然後在DetailView中推送RootViewController。我怎樣才能做到這一點?如何通過UINavigationController設置navigationController?

的AppDelegate

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
      RootViewController *controller = [[RootViewController alloc] init]; 
//getting warnings here.(Unused variable navigationController) 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller]; 
    [controller doStuff]; 
    [controller release]; 
} 

RootViewController的

-(void)doStuff{ 
     [[self stories] removeAllObjects]; 
    [self startParsing]; 
    [self.tableView reloadData]; 
    DetailViewController *detail = [[DetailViewController alloc] init]; 
    //custom code 
    [self.navigationController pushViewController:detail animated:YES]; 
[detail release]; 

這是使用的是現在的代碼讀音字。而PLZ注意到我

[self.tableView reloadData]; 
+0

是你想要顯示detailView的doStuff嗎? – 2011-02-25 00:13:41

+0

是。我認爲它可能 – Piscean 2011-02-25 00:15:57

回答

4

好吧,現在我很確定我明白了這個問題。問題是,你從不在UIViewController上手動設置navigationController屬性。如果視圖控制器不在導航控制器下,那麼navigationController屬性爲零,如果是,則屬性指向它。

你需要做的是當你顯示你的根視圖控制器,而不是直接顯示它的視圖,將它添加到導航控制器,然後顯示導航控制器的視圖。像這樣:

​​

所以,你必須在導航控制器的根視圖控制器,在方法的根視圖控制器後,你可以這樣做:

DetailViewController *detail = [[DetailViewController alloc] init]; 
//Do whatever you need to do to set values on the detail view controller 
[self.navigationController pushViewController:detail animated:YES]; 

最關鍵的事情是這樣的:你需要將根視圖控制器放入導航控制器,然後才能從根視圖控制器訪問導航控制器。

+0

這意味着我會寫在AppDelegate的第一部分代碼和第二部分在RootViewController的方法doStuff。對? – Piscean 2011-02-25 00:34:17

+0

是的,這是正確的。 – 2011-02-25 00:36:49

+0

以及它不重載tableView。我認爲它應該。而且我也用RootViewController中的刷新按鈕調用doStuff。當我點擊通知中的操作按鈕時,它什麼也不做,但是當我點擊RootViewController類中的刷新按鈕時,它顯示最新項目的DetailView。而且我還在AppDelegate中有兩個警告,'未使用的變量navigationController – Piscean 2011-02-25 00:58:54

0

如果沒有UINavigationController的開始了,並希望在其堆棧多個視圖控制器來顯示它,INITING導航控制器後,您可以屬性設置viewControllers與數組你想要的各種視圖控制器。

編輯:一些示例代碼:

UINavigationController *navController = [[UINavigationController alloc] init]; 
NSArray *viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; 
[navController setViewControllers:viewControllers animated:NO]; 

這樣做之後,你的導航控制器將會對頂部和viewController1背後viewController2。

或者,你可以這樣來做:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController1]; 
[navController pushViewController:viewController2 animated:NO]; 
+0

我沒有得到那個。你能多解釋一下嗎? – Piscean 2011-02-24 23:21:08

+0

@Piscean我用一些示例代碼編輯它,這有幫助嗎? – 2011-02-24 23:32:03

+0

我不明白一件事。當我的navigationController是零這意味着我沒有任何控制器在我的navigationController。現在我怎樣才能讓rootViewController。 bcz rootViewController顯示tableView,它顯示單元格中的所有提要。所以第一我需要做的rootViewController。我在iphone開發中很新。我閱讀UINavigationController文檔,但我無法解決我的問題。我將用一些代碼編輯我的問題,然後也許你可以告訴我一些簡單的解決方案。 thanx – Piscean 2011-02-24 23:58:30

0

如果你的導航控制器是零,它需要創造,然後你把東西放到它。 試試這個:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 
[navController pushViewController:detailViewController animated:NO]; // or YES 
+0

rootViewController未聲明。這是錯誤。我如何使rootViewController 1st – Piscean 2011-02-24 22:40:25

相關問題