【问题标题】:How to set up a navigationController by UINavigationController?如何通过 UINavigationController 设置 navigationController?
【发布时间】:2011-07-03 21:50:24
【问题描述】:

我正在处理推送通知。当单击通知中的操作按钮时,我正在尝试在 navigationController 中创建和推送 DetailView。但导航控制器为零。我怎样才能把那个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];

【问题讨论】:

  • doStuff 是您要在其中显示详细视图的位置吗?

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


【解决方案1】:

如果您一开始没有 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];

【讨论】:

  • 我没明白。你能再解释一下吗?
  • 我不明白一件事。当我的navigationController 为零时,这意味着我的navigationController 中没有任何控制器。现在我该如何制作 rootViewController。 bcz rootViewController 显示 tableView 显示单元格中的所有提要。所以首先我需要制作那个rootViewController。我是 iphone 开发的新手。我阅读了 UINavigationController 文档,但我无法解决我的问题。我将用一些代码编辑我的问题,然后也许你可以告诉我一些简单的解决方案。谢谢
  • @Piscean 好的,让我们一步一步来。你想在你的 UINavigationController 中显示什么类?
  • 我编辑了这个问题。我想重新解析提要并重新加载 tableView。然后显示最新的提要项DetailView。我有 3 节课。 AppDelegate、RootViewController 和 DetailViewController。
【解决方案2】:

如果你的导航控制器是 nil,它需要创建然后你把东西放进去。 试试这个:

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

【讨论】:

  • rootViewController 未声明。这是错误。我怎样才能使 rootViewController 第一
【解决方案3】:

好的,现在我很确定我理解了这个问题。问题是,您永远不会在 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];

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

【讨论】:

  • 这意味着我将在 AppDelegate 中编写第一部分代码,在 RootViewController 的方法 doStuff 中编写第二部分。对吗?
  • 它没有重新加载 tableView。我认为应该。我还在 RootViewController 中使用刷新按钮调用该 doStuff。当我单击通知中的操作按钮时,它什么也不做,但当我单击 RootViewController 类中的刷新按钮时,它会显示最新项目的 DetailView。我还在 AppDelegate 中收到 2 个警告,它们是“未使用的变量 navigationController
  • 要重新加载数据,只需这样做:[self.tableView reloadData] 就警告而言,如果您可以在警告所在的位置发布代码会很有帮助。
  • 好的,我将用我的代码编辑我的问题代码,以便您查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多