我在导航项中添加了一个右侧栏按钮项,并希望在某些条件下删除它。这就是我在做的事情:
self.navigationItem.rightBarButtonItem = nil;
但没有得到理想的行为。
我想隐藏它,但找不到任何方法。
答案 0 :(得分:16)
你在做什么应该工作。我做了很多次。您确定要从正确的导航项中删除按钮吗? self
是当前显示的UIViewController
?
答案 1 :(得分:8)
我知道三种方式: (在右侧加入)
如果您有多个条形按钮:
self.navigationItem.rightBarButtonItems = nil
否则,如果您只有一个条形按钮
self.navigationItem.rightBarButtonItem = nil
设置一个零按钮:
self.navigationItem.setRightBarButtonItem(nil, animated: false)
答案 2 :(得分:3)
Swift 3 - 我在导航栏的左侧和右侧都有几个按钮,所以我使用以下方法隐藏它们:
func hideNavItems() {
navigationItem.setLeftBarButtonItems(nil, animated: true)
navigationItem.setRightBarButtonItems(nil, animated: true)
}
在我的情况下,我实际上需要在以后再次显示这些按钮,所以我将它们保存在一个数组中:
var leftNavItems: [UIBarButtonItem]!
var rightNavItems: [UIBarButtonItem]!
然后我只是调用一个函数来显示(重新添加)它们:
func showNavItems() {
navigationItem.setLeftBarButtonItems(leftNavItems, animated: true)
navigationItem.setRightBarButtonItems(rightNavItems, animated: true)
}
答案 3 :(得分:2)
我通过创建一个新的rightBarButtonItem来解决它。
创建属性:
@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;
合成
@synthesize clearRightButtonItem = _clearRightButtonItem;
创建getter:
- (UIBarButtonItem *) clearRightButtonItem {
if (_clearRightButtonItem == nil) {
UIButton *rightButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 38, 38)];
[rightButton setImage:nil forState:UIControlStateNormal];
_clearRightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
}
return _clearRightButtonItem;
}
然后使用new clearRightButtonItem设置rightBarButtonItem:
self.rightButtonItem = self.clearRightButtonItem;
答案 4 :(得分:1)
我的回答与此问题无关,但由于这是谷歌的最佳结果,因此我将贡献我的问题经验
我使用了rightBarButtonItem的项目数组,因此以某种方式使用
self.navigationItem.rightBarButtonItem = nil;
我没有为我工作所以我做了一个空的barbutton项目并使用
将其设置为rightBarButtonItem [self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];
现在它消失了。
答案 5 :(得分:0)
将导航栏添加到实际上未嵌入导航控制器的视图控制器时,我遇到了这个问题。在这种情况下,self.navigationItem不是用于按住条形按钮的正确对象。我发现的工作(虽然您可能只是将视图控制器嵌入导航控制器)是为您在Interface Builder中添加的导航栏创建属性并正常链接它。在这种情况下,我将其命名为“navBar”。
然后你必须得到navBar的导航项而不是视图的导航项。在这种情况下,此代码似乎有效:
UINavigationItem *item = [self.navBar.items objectAtIndex:0];
item.rightBarButtonItem = nil;
答案 6 :(得分:0)
最近我遇到了同样的问题,我解决了这个问题(感谢Erik B.,你的回答激发了我的灵感!不幸的是我还不能投票给你答案)
我认为我的右键按钮无法消失,因为我在viewWillAppear
函数中调用它,并且在该函数中self
未被引用到当前UIViewController
。
这对我有用,而不是在viewWillAppear
中设置按钮,我将其设置在上一个 navigationController:willShowViewController:animated:
的{{1}}功能中。
例如,我从UIViewController
拨打SecondViewController
,我想隐藏FirstViewController
中的右侧栏按钮,将其放入SecondViewController
:
FirstViewController.m
答案 7 :(得分:0)
使用以下代码对我有用:
self.navigationItem?.rightBarButtonItem = nil
navigationBar.items = [self.navigationItem!]
答案 8 :(得分:0)
if let nav = self.navigationController {
nav.navigationItem.setRightBarButtonItems(nil, animated: true)
nav.navigationBar.topItem?.rightBarButtonItems = []
}
答案 9 :(得分:0)
对于其他人: 我也试过
self.navigationItem.rightBarButtonItem = nil;
它不起作用, 然后我注意到我没有从主线程中调用它。