我正在使用推送通知。我正在尝试在单击通知中的操作按钮时在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];
答案 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