在UINavigationController中为根视图制作后退按钮

时间:2011-06-06 02:08:55

标签: objective-c ios uinavigationcontroller

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

或者,这是不好的形式?我应该如何逃避 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];

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

3 个答案:

答案 0 :(得分:16)

您可以采用其他方法。

转到方法:

- (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 :(得分:3)

我能想到几种方法。

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

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

      

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

    有人回复:

      

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

答案 2 :(得分:0)

尝试dis: -

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