在UINavigationController中为根视图制作返回按钮

所以我手动创建了一个UINavigationController ,将它设置为我的UIWindow的 rootViewController,我想使用后退按钮退出UINavigationController并在其位置加载另一个viewController。 但是, UINavigationBarbackItem属性是readonly ,所以我不知道如何正确设置它(它是只读的 ,在根导航视图中默认为nil)。 我怎样才能实现这一点(或者类似的效果,我希望能够通过按下根视图上的后退按钮有效地“退出”这个UINavigationController )。

或者,这是不好的forms? 我应该如何逃避UINavigationController的根视图?

编辑:

使用以下代码尝试Legolas的解决方案:(某些名称已更改)

UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:plvc]; // plvc being the first viewcontroller MyAppDelegate* appDelegate = [Utility getAppDelegate]; appDelegate.window.rootViewController = navController; UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; navController.navigationItem.leftBarButtonItem = backButton; [navController.navigationItem setHidesBackButton:YES animated:YES]; [navController.view setNeedsDisplay]; 

但按钮不显示。 我究竟做错了什么? 其他后退按钮显示正常,但这一个仍然没有。

您可以采用不同的方法。

转到方法:

 - (void)viewDidLoad 

隐藏后退按钮

 [self.navigationItem setHidesBackButton:YES animated:YES]; 

创建一个新的UIButton或UIBarButtonItem,并将其放在后退按钮的位置。

然后,您可以在单击按钮时使用操作

 - (IBAction) clickBackButton : (id) sender; //and push view controller to your required view. 

更新我的答案:在viewDidLoad方法中使用它//就像一个魅力//

 [self.navigationItem setHidesBackButton:YES animated:YES]; UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Start" style:UIBarButtonItemStyleBordered target:self action:@selector(initializeStuff)]; self.navigationItem.leftBarButtonItem = backButton; 

我能想到几种方法。

  1. 使用您自己设计的“后退”按钮图标或系统默认值。 使用leftBarButtonItem
  2. 制作默认图标的图像。 再次,使用leftBarButtonItem
  3. 创建一个推入UINavigationController堆栈的虚假根视图。 此根视图的唯一目的是启动辅助视图,或在用户返回时死亡。 这样,您将永远不会看到没有后退按钮的UINavigationController 。 我测试了这个(但没有测试过); 性能影响似乎微不足道。

另外,请查看2008年的< https://discussions.apple.com/message/8298537#8298537 >。同样的问题。

问题是,用户如何离开UINavigationController并返回应用程序? 根导航栏没有后退按钮或任何类型的挂钩退出。

有人回复:

要做你想做的事,诀窍是将“超级根”控制器放在导航控制器中,但是让它在viewWillAppear中将导航控制器的navigationBarHidden属性设置为YES,在viewWillDisappear中设置为NO。 (对于奖励积分,请在适当的时候制作动画。)

尝试dis: –

 UIBarButtonItem *leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStylePlain target:self action:@selector(initializeStuff)]; [self.navigationItem setleftBarButtonItem:leftBarButton]; [leftBarButton release];