我需要在导航栏中隐藏右键,然后在用户选择一些选项后取消隐藏它。
不幸的是,以下不起作用:
NO GOOD: self.navigationItem.rightBarButtonItem.hidden = YES; // FOO CODE
有办法吗?
通过将引用设置为nil来隐藏按钮,但是如果您想稍后恢复它,则需要挂起它的副本以便重新分配它。
UIBarButtonItem *oldButton = self.navigationItem.rightBarButtonItem;
[oldButton retain];
self.navigationItem.rightBarButtonItem = nil;
//... later
self.navigationItem.rightBarButtonItem = oldButton;
[oldButton release];
就个人而言,在我的应用程序中,我将导航按钮设置为@properties,以便我可以随意删除并重新创建它们,所以类似于:
//mycontroller.h
UIBarButtonItem *rightNavButton;
@property (nonatomic, retain) UIBarButtonItem *rightNavButton;
//mycontroller.m
@synthesize rightNavButton;
- (UIBarButtonItem *)rightNavButton {
if (!rightNavButton) {
rightNavButton = [[UIBarButtonItem alloc] init];
//configure the button here
}
return rightNavButton;
}
//later, in your code to show/hide the button:
self.navigationItem.rightBarButtonItem = self.rightNavButton;
斯威夫特2:
特技!
隐藏:
if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
btn.enabled = false
btn.title = ""
}
节目:
if let btn = self.tabBarController!.navigationItem.rightBarButtonItem {
btn.enabled = true
btn.title = "ButtonName"
}
在swift 4中,我有一个显示/隐藏右键或左键的技巧:
第1步:在视图控制器中创建一个IBOutlet按钮:
@IBOutlet var navigationItemButton: UIBarButtonItem!
第2步:创建隐藏按钮功能:
func hideNavigationButton() {
navigationItemButton.isEnabled = false
navigationItemButton.tintColor = UIColor.clear
}
第3步:创建显示按钮功能:
func showNavigationButton() {
navigationItemButton.isEnabled = true
navigationItemButton.tintColor = UIColor.white
}
第4步:只需调用所需的函数,使用hideNavigationButton()
隐藏,然后使用showNavigationButton()
显示按钮。
问候!
如果右侧只有一个条形按钮项,则可以使用此项,
self.navigationItem.rightBarButtonItem = nil;
假设您在右侧有多个条形按钮,例如假设您在导航项目的右侧有两个条形按钮项目(搜索按钮和过滤器按钮)。现在正确的栏按钮项目是
self.navigationItem.rightBarButtonItems = [searchItem,filterItem]
而且你必须只隐藏搜索按钮,你可以使用像,
self.navigationItem.rightBarButtonItems = [filterItem]
现在发生了什么,您可以完全隐藏导航项中的搜索按钮,并且过滤器项代替搜索项
节目:
//set navigationItem tint color white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor whiteColor];
隐藏:
//set navigationItem tint clear white
self.navigationItem.rightBarButtonItem.tintColor = [UIColor clearColor];
xxxButton
(请打开助理编辑器,Control +拖动xxx按钮到YourViewController类作为插座“xxxButton”)。
或者你可以使用像let xxxButton = navigationBar.buttons[1]
这样的东西
xxxButton.customView = UIView()
或
navigationItem.rightBarButtonItems?.remove(at: (navigationItem.rightBarButtonItems?.index(of:xxxButton)!)!)
xxxButton.customView = nil
或
navigationItem.rightBarButtonItems?.insert(newElement: xxxButton, at:SOME_INDEX)
希望有帮助。
隐藏:
if let topItem = self.navigationController?.navigationBar.topItem {
topItem.rightBarButtonItem = nil
}
首先将标题设置为空,然后再次设置swlwction。
您可以使用以下代码:
self.navigationItem.rightBarButtonItem?.image = nil
self.navigationItem.rightBarButtonItem?.isEnabled = false
对于swift 5来隐藏rightBarButtonItem
self.navigationItem.rightBarButtonItem?.customView?.isHidden = true
对于Swift 3
if let button = self.navigationItem.rightBarButtonItem {
button.isEnabled = false
button.tintColor = UIColor.clear
}`
设置参考nil:
current_controller_in_navcontroller.navigationItem.rightBarButtonItem = nil;
另外一定要在navController当前显示的控制器中调用它,而不是navController本身。
节目:
[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];
隐藏:
[self.navigationItem.rightBarButtonItem.customView setAlpha:0.0];
您甚至可以为其显示/隐藏设置动画
[UIView animateWithDuration:0.2 animations:^{
[self.navigationItem.rightBarButtonItem.customView setAlpha:1.0];
}];
这是Matt为Storyboards&ARC更新的解决方案。请记住,默认情况下,IBOutlets是__weak,因此您需要将其更改为strong,以免过早发布。
@interface MAGTableViewController () <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UIBarButtonItem *rightBarButton;
@end
@implementation MAGTableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationItem setRightBarButtonItem:nil];
}
- (IBAction)rightBarButtonItemTapped:(id)sender
{
[self.view endEditing:YES];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self.navigationItem setRightBarButtonItem:self.rightBarButton];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self.navigationItem setRightBarButtonItem:nil];
}
@end
信用证必须转到learner这个答案,答案来自这个问题:
hide and show left navigation bar button on demand in iOS-7
这就是答案,这要简单得多。
//hide and reveal bar buttons
-(void) hideAndDisableLeftNavigationItem
{
[self.navigationItem.leftBarButtonItem setTintColor:[UIColor clearColor]];
[self.navigationItem.leftBarButtonItem setEnabled:NO];
}
-(void) showAndEnableLeftNavigationItem
{
[self.navigationItem.leftBarButtonItem setTintColor:[UIColor blueColor]];
[self.navigationItem.leftBarButtonItem setEnabled:YES];
}
然后你就像在(IBAction)
中那样引用你需要它的方法,如下所示:
[self hideAndDisableLeftNavigationItem];//[self showAndEnableLeftNavigationItem]; to show again
我尝试了所有其他方法,没有工作,甚至引用我的按钮作为@property (...) UIBarButtonItem....
,没有任何工作,直到我找到这个。
SWIFT 2.2
在swift 2.2中,self.navigationItem不起作用。而是创建NavigationItem的出口(我在“nav”下面命名)并使用它。
此外,以下建议对我使用Xcode 7.3和swift 2.2不起作用
nav.leftBarButtonItem?.customView?.hidden = true
所以我在上面使用@Matt J的想法如下(我左边有两个项目):
@IBOutlet weak var settingItem: UIBarButtonItem!
@IBOutlet weak var logoItem: UIBarButtonItem!
var sav_settingItem: UIBarButtonItem = UIBarButtonItem()
var sav_logoItem: UIBarButtonItem = UIBarButtonItem()
sav_settingItem = nav.leftBarButtonItems![0]
sav_logoItem = nav.leftBarButtonItems![1]
nav.leftBarButtonItem = nil
nav.leftBarButtonItem = nil
if (nav.leftBarButtonItem == nil) {
nav.leftBarButtonItem = sav_settingItem
nav.leftBarButtonItems?.append(sav_logoItem)
return
}
节目:
[self.navigationItem.rightBarButtonItem.customView setHidden:NO];
隐藏:
[self.navigationItem.rightBarButtonItem.customView setHidden:YES];
我的解决方案
self.navigationItem.rightBarButtonItem.customView.hidden=NO;