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