iOS导航栏:将左栏按钮从菜单更改为后退
Posted
技术标签:
【中文标题】iOS导航栏:将左栏按钮从菜单更改为后退【英文标题】:iOS Navigation Bar: change left bar button from menu to back 【发布时间】:2013-10-25 08:25:59 【问题描述】:我有一个使用侧边菜单的应用程序,并且有几个可以从菜单访问的主屏幕以及只能从这些屏幕访问的其他屏幕。
我想要的是在导航栏上有一个菜单按钮,可以打开菜单并且只能在主屏幕上看到。在其他屏幕上,我希望有一个后退按钮,而不是菜单按钮。
我已经把菜单按钮设置成这样了:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"IconMenu"] style:UIBarButtonItemStylePlain target:self.revealViewController action:@selector(revealToggle:)];
但我不知道如何在需要时使用后退按钮进行更改。
【问题讨论】:
【参考方案1】:假设您所说的“主屏幕”指的是导航视图控制器中与所选侧菜单项相对应的根(第一个)视图控制器,这可能是您问题的解决方案:您可以为所有视图控制器创建一个超类,比如 MyBaseViewController 并重写 viewWillAppear:
方法,这将根据它是否是“主屏幕”来确定它是否应该具有默认的后退按钮或“revealSideMenu”按钮。
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
if (self == [self.navigationController.viewControllers firstObject])
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"IconMenu"] style:UIBarButtonItemStylePlain target:self.revealViewController action:@selector(revealToggle:)];
【讨论】:
Dariaa,如果我在 viewDidLoad 中没有错,则视图控制器尚未添加到 navigationCoroller 堆栈中,因此此代码将不起作用 我的错,我的意思是 viewWillAppear 问题是我只有一个导航控制器(我找到的开源菜单库中实现的那个)。 那我误解了你的意思是我的“主屏幕”。那么“主”屏幕和非“主”屏幕有什么区别? 您使用的是哪个库?看看这个github.com/gotosleep/JASidePanels【参考方案2】:您可以通过两种不同的方式做到这一点:
第一个是在 viewDidAppear 检查后退按钮是否已经存在(当您按下 VC 时,后退按钮会自动添加但仅在 viewDidAppear 之后以编程方式可用)然后决定是否添加菜单按钮,
第二个是向你的 VC 初始化方法添加一个参数,例如 isRoot 或 hasMenu 或任何你喜欢的名称,并使用该标志决定添加菜单或返回按钮
如果您选择添加自己的后退按钮,则必须在后退选择器中调用此方法
[self.navigationController popViewControllerAnimated:YES];
【讨论】:
【参考方案3】:IMO 最简单的方法就是点击第一个 ViewController 的标题栏,然后在 Attribute Inspector (⌥+⌘+4)
中更改 Navigation Item 信息你想要:Title -> 后退按钮会显示什么*,或者如果你想让它说出第一个 ViewController 的 Title 或单词“Back”,您只需将其放在 Back Button 字段中即可。
*如果第二个 ViewController 的 Title 太长而无法容纳它,它将被替换为单词“Back”(如果单词“Back”不适合它只会有箭头标志)。
【讨论】:
以上是关于iOS导航栏:将左栏按钮从菜单更改为后退的主要内容,如果未能解决你的问题,请参考以下文章