如何通过UINavigationController设置navigationController?

时间:2011-02-24 21:45:14

标签: iphone objective-c cocoa-touch uinavigationcontroller apple-push-notifications

我正在使用推送通知。我正在尝试在单击通知中的操作按钮时在navigationController中创建并推送DetailView。但是navigationController是零。我怎么能把这个DetailView放在navigationController中?我想在navigationController中推送RootViewController,然后是DetailView。我怎么能这样做?

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];

这是我现在正在使用的代码。并且请注意我有

 [self.tableView reloadData];

3 个答案:

答案 0 :(得分:5)

好的,现在我很确定我理解这个问题。问题是,你从不在UIViewController上手动设置navigationController属性。如果视图控制器不在导航控制器下,则navigationController属性为nil,如果是,则属性指向它。

您需要做的是,当您显示根视图控制器时,而不是直接显示其视图,将其添加到导航控制器,然后显示导航控制器的视图。像这样:

RootViewController *controller = [[RootViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
//Here you would display navigationController.view somehow

因此,在导航控制器中拥有根视图控制器之后,在根视图控制器中的方法中,您可以这样做:

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];

关键是:您需要将根视图控制器放入导航控制器,然后才能从根视图控制器中访问导航控制器。

答案 1 :(得分:0)

如果您从没有UINavigationController开始并希望在其堆栈中显示多个视图控制器,则在启动导航控制器后,您可以将viewControllers属性设置为具有所需各种视图控制器的数组。

编辑:一些示例代码:

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

执行此操作后,导航控制器将在顶部放置viewController2,在其后面放置viewController1。

或者,你可以这样做:

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

答案 2 :(得分:0)

如果您的导航控制器为零,则需要创建,然后将内容放入其中。 试试这个:

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