可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have added a BarButton
item to the left of the nav.bar
through Interface Builder and in the code I want this only to show in my table view's edit mode. But I didn't find any hidden property to set the leftBarButtonItem
(like: self.navigationItem.leftBarButtonItem.hidden = YES
).
I can only set enabled
property. Anybody know how to control the hide and show property of the leftBarButtonItem
, please help.
回答1:
This works I tried it myself
self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.hidesBackButton = YES;
回答2:
I'm pretty sure the only way to "hide" it is to nil it out.
self.navigationItem.leftBarButtonItem = nil;
Though it's not a perfect answer to your question, since that basically gets rid of your button instead of hiding it. You'll either have to recreate it or keep your original button around and simply set the leftBarButtonItem back to your UIBarButtonItem.
回答3:
I have a easy function to make this.
I have a navigation like this.
It comes form Interface Builder, it has a background image.
@IBOutlet weak var memberBtn: UIBarButtonItem!
you can hide/show it by:
func hideMemberBtn() {
memberBtn.isEnabled = false
memberBtn.tintColor = UIColor.clear
}
func showMemberBtn() {
memberBtn.isEnabled = true
memberBtn.tintColor = UIColor.white
}
It's easy but it work for me. You can change tintColor as you needed.
Hope for help :]
回答4:
You can use
// Hide
self.navigationItem.leftBarButtonItem = nil;
// Show
self.navigationItem.leftBarButtonItem = self.myBarButtonItem
The key is making sure that you have a strong reference to the button item before nilling leftBarButtonItem
.
@property (strong, nonatomic) IBOutlet UIBarButtonItem *myBarButtonItem;
回答5:
I just created my own "hide" function show below:
- (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:)];
}
}
You can just call it like:
[self hideClearButton:YES]; //hide it
or
[self hideClearButton:NO]; //show it
回答6:
There's nothing in the documentation to suggest bar items have a hidden property.
Why not set
self.navigationItem.leftBarButtonItem = nil;
when the user isn't editing, then set
self.navigationItem.leftBarButtonItem = whateverBarButtonItem;
when the user is editing? This requires either re-creating the button each time or storing it for the duration of the view's lifecycle. Neither is terribly painful, but no, not nearly as easy as a .hidden property.
回答7:
You can use
[self.navigationItem.leftBarButtonItem setEnabled:TRUE];
as there is no other way to hide it. so just disable it.
回答8:
To hide/disable
[self.navigationItem.leftBarButtonItem setEnabled:FALSE];
To show/enable
[self.navigationItem.leftBarButtonItem setEnabled:TRUE];
回答9:
Well making it nil was not a option because i wanted to show it again and didnt want to create a button again.
so what i did was
UIBarButtonItem *barButton = (UIBarButtonItem *)self.navBar.topItem.leftBarButtonItem;
barButton.customView.hidden = true;//Hide
barButton.customView.hidden = false;//Show
Works for me. (my leftBarButtonItem was created using customView)
Hope it helps.
回答10:
This solution work for me
UIView *myView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 30)];
UIBarButtonItem *btnL = [[UIBarButtonItem alloc]initWithCustomView:myView];
self.navigationItem.leftBarButtonItem = btnL;