我已经在导航条上添加了一个右侧按钮项目,并希望在某些条件下将其删除。这是我的做法:
self.navigationItem.rightBarButtonItem = nil;
但是没有得到期望的行为。
我想要隐藏它,但找不到任何方法。
我已经在导航条上添加了一个右侧按钮项目,并希望在某些条件下将其删除。这是我的做法:
self.navigationItem.rightBarButtonItem = nil;
但是没有得到期望的行为。
我想要隐藏它,但找不到任何方法。
你正在做的应该可以工作。我已经多次这样做了。你确定你正在从正确的导航项中移除按钮吗?self
是当前显示的 UIViewController
吗?
Swift 5/4/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)
}
如果您有多个bar按钮:
self.navigationItem.rightBarButtonItems = nil
否则,如果您只有一个bar按钮
self.navigationItem.rightBarButtonItem = nil
设置一个空按钮:
self.navigationItem.setRightBarButtonItem(nil, animated: false)
@property (nonatomic, strong) UIBarButtonItem *clearRightButtonItem;
合成:
@synthesize clearRightButtonItem = _clearRightButtonItem;
- (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;
}
然后使用新的clearRightButtonItem设置rightBarButtonItem:
self.rightButtonItem = self.clearRightButtonItem;
最近我遇到了同样的问题,但我解决了它(感谢Erik B.,你的答案启发了我!不幸的是,我不能投票支持你的答案)
我觉得我的右侧栏按钮不能消失是因为我在viewWillAppear
函数中调用了它,在这个函数中,self
并没有指向当前的UIViewController
。
这对我有用,而不是在viewWillAppear
中设置按钮,我在前一个UIViewController
的navigationController:willShowViewController:animated:
函数中设置它。
例如,我从FirstViewController
调用SecondViewController
,我想在SecondViewController
中隐藏右侧栏按钮,在FirstViewController.m
中加入以下内容:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if ([viewController isKindOfClass:[SecondViewController class]]) {
[viewController.navigationItem setRightBarButtonItem:nil];
}
}
我不是特别针对这个问题回答,但由于这是谷歌搜索的顶部结果,因此我将分享我解决这个问题的经验。
我曾经使用过一个包含多个项的数组作为rightBarButtonItem,因此在某种情况下使用了
self.navigationItem.rightBarButtonItem = nil;
原本不起作用,所以我创建了一个空的barbutton项,并使用该方法将其设置为rightBarButtonItem
[self.navigationItem setRightBarButtonItems:@[self.clearRightButtonItem]];
对于其他人: 我也尝试过
self.navigationItem.rightBarButtonItem = nil;
它没有起作用, 然后我注意到我没有从主线程调用它。
if let nav = self.navigationController {
nav.navigationItem.setRightBarButtonItems(nil, animated: true)
nav.navigationBar.topItem?.rightBarButtonItems = []
}
以下代码对我有效:
self.navigationItem?.rightBarButtonItem = nil
navigationBar.items = [self.navigationItem!]
UINavigationItem *item = [self.navBar.items objectAtIndex:0];
item.rightBarButtonItem = nil;