繁体   English   中英

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

[英]Making back button for root view in UINavigationController

所以我手动创建了一个UINavigationController ,将其设置为我的 UIWindow 的rootViewController,我想使用后退按钮退出UINavigationController并在其位置加载另一个 viewController。 但是, UINavigationBarbackItem属性是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];

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

你可以用不同的方法来做到这一点。

Go 到方法:

- (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 并返回应用程序? 根导航栏没有后退按钮或任何类型的退出钩子。

有人回复说:

要做你想做的事,诀窍是将“超级根”controller 放在导航 controller 中,但在 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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM