隐藏UINavigationItem的酒吧按钮

问题描述:

我已经通过Interface Builder在nav.bar的左侧添加了一个BarButton项目,并且在代码中我希望这只能显示在我的表视图的编辑模式中。但我没有发现任何隐藏的财产来设置leftBarButtonItem(如:self.navigationItem.leftBarButtonItem.hidden = YES)。隐藏UINavigationItem的酒吧按钮

我只能设置enabled属性。任何人都知道如何控制leftBarButtonItem的隐藏和显示属性,请帮助。

我敢肯定,“隐藏”它的唯一方法就是将其省略掉。

self.navigationItem.leftBarButtonItem = nil; 

虽然它不是你的问题的完美答案,因为它基本上摆脱了你的按钮,而不是隐藏它。您将不得不重新创建它或保留原始按钮,只需将leftBarButtonItem设置回您的UIBarButtonItem即可。

+0

感谢您的回复。如果我真的不能隐藏,我也在想这样一种方法。 – Sreehari 2009-08-04 08:48:22

在文档中没有任何建议栏项具有隐藏属性。

为什么不设置

self.navigationItem.leftBarButtonItem = nil; 

当用户没有编辑,然后设置

self.navigationItem.leftBarButtonItem = whateverBarButtonItem; 

当用户正在编辑?这需要每次重新创建按钮或在视图生命周期期间存储它。也不是非常痛苦,但不是,就像隐藏的财产一样容易。

+0

尼尔打败了我 - 完全。 – 2009-08-04 08:47:54

这工作我没有尝试过自己

self.navigationItem.leftBarButtonItem = nil; 
self.navigationItem.hidesBackButton = YES;  
+3

在某些情况下,将它设置为零对我来说不起作用,但将hideBackButton设置为YES正常工作!谢谢。 – 2010-12-22 14:53:34

+1

设置为nil将让navigationItem遵循其默认行为,即在导航控制器的子视图中显示后退按钮,这就是为什么您还需要将hidesBackButton设置为true,如果您不想显示任何内容曾经 – Nycen 2015-02-08 17:40:44

您可以使用

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

,因为没有其他的方法来隐藏它。所以只需禁用它。

我刚刚创建低于我自己的 “隐藏” 功能显示:

- (void)hideClearButton:(BOOL)hide { 

    if (hide) { 
     self.navigationItem.leftBarButtonItem = nil; 
    } 
    else { 
     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] 
               initWithTitle:NSLocalizedString(@"Clear", @"Recents") 
               style:UIBarButtonItemStylePlain 
               target:self action:@selector(clearAll:)]; 

    } 
} 

你可以叫它像:

[self hideClearButton:YES]; //hide it 

[self hideClearButton:NO]; //show it 

隐藏/禁用

[self.navigationItem.leftBarButtonItem setEnabled:FALSE]; 

要显示/启用

[self.navigationItem.leftBarButtonItem setEnabled:TRUE]; 

您可以使用

// Hide 
self.navigationItem.leftBarButtonItem = nil; 

// Show 
self.navigationItem.leftBarButtonItem = self.myBarButtonItem 

的关键是确保你有nilling leftBarButtonItem参考按钮项。

@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem; 

好使它成为零是不是一个选择,因为我想再次显示它,并不想再次创建一个按钮。

所以我所做的就是

UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem; 
barButton.customView.hidden = true;//Hide 
barButton.customView.hidden = false;//Show 

为我工作。 (我的leftBarButtonItem是使用customView创建的)

希望它有帮助。

这对我

UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)]; 
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView]; 
self.navigationItem.leftBarButtonItem = btnL; 

解决方案的工作,我有一个简单的功能,使这个。 我有这样的导航。 Navigation Bar 它来自Interface Builder,它有一个背景图像。

@IBOutlet weak var memberBtn: UIBarButtonItem! 

你可以隐藏/显示用它:

func hideMemberBtn() { 
    memberBtn.isEnabled = false 
    memberBtn.tintColor = UIColor.clear 
} 
func showMemberBtn() { 
    memberBtn.isEnabled = true 
    memberBtn.tintColor = UIColor.white 
} 

这很容易,但它为我工作。您可以根据需要更改tintColor。 希望求助:]