[我使用xcode7在iOS9.0中的导航栏上实现了两个右栏按钮项,我想以指定条件隐藏/显示一个右栏按钮。我正在使用以下代码。请帮助我
UIBarButtonItem *selectButton= [[UIBarButtonItem alloc]initWithTitle:@"Select" style:UIBarButtonItemStylePlain target:self action:@selector(clickOnSelect:)];
UIBarButtonItem *shareButton = [[UIBarButtonItem alloc]initWithTitle:@"Share" style:UIBarButtonItemStylePlain target:self action:@selector(clickOnShare:)];
self.navigationItem.rightBarButtonItems = @[selectButton,shareButton];
-(void)clickOnSelect:(id)sender{
NSLog(@"self.navigationItem.rightBarButtonItems :%@",self.navigationItem.rightBarButtonItems);
UIBarButtonItem *shareButton = (UIBarButtonItem *) [self.navigationItem.rightBarButtonItems objectAtIndex:1];
shareButton.customView.hidden = YES; // its not working
}
尝试一下:
-(void) changeBarButtonVisibility:(UIBarButtonItem*) barButtonItem visibility:(BOOL) shouldShow {
UIColor *tintColor = shouldShow == NO ? [UIColor clearColor] : nil;
[barButtonItem setEnabled:shouldShow];
[barButtonItem setTintColor:tintColor];
}
并调用上述方法并传递您要隐藏的条形按钮
[self changeBarButtonVisibility:self.navigationItem.rightBarButtonItems[0] visibility:NO];
[self changeBarButtonVisibility:self.navigationItem.rightBarButtonItems[1] visibility:YES];
本机UIBarButtonItem没有“ .hidden
”属性。
列出了许多可能的答案in this very related question,我认为最适合您的方法是尝试将UIBarButtonItem子类化(HidableBarButtonItem子类),仅在标题应该被隐藏的情况下才用空字符串替换标题。
尝试一下
-(UIBarButtonItem *)getLeftBarbuttonItem{
UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom];
menuButton.frame = CGRectMake(0, 0, 24, 24);
[menuButton setImage:[UIImage imageNamed:@"menu-icon.png"] forState:UIControlStateNormal];
[menuButton addTarget:self.revealController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftbarButton = [[UIBarButtonItem alloc] initWithCustomView:menuButton];
return leftbarButton;
}
-(void)showNavBarItem:(BOOL)isShow{
if(isShow){
[self.navigationItem setLeftBarButtonItem:[self getLeftBarbuttonItem] animated:true];
}else{
[self.navigationItem setLeftBarButtonItem:nil animated:true];
}
}
右侧BarButton隐藏
-(UIBarButtonItem *)getFirstBarbuttonItem:(BOOL)isHide{
UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom];
menuButton.frame = CGRectMake(0, 0, 24, 24);
[menuButton setImage:[UIImage imageNamed:@"menu-icon.png"] forState:UIControlStateNormal];
[menuButton addTarget:self.revealController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];
menuButton.hidden = isHide;
UIBarButtonItem *leftbarButton = [[UIBarButtonItem alloc] initWithCustomView:menuButton];
return leftbarButton;
}
-(UIBarButtonItem *)getSecondBarbuttonItem:(BOOL)isHide{
UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom];
menuButton.frame = CGRectMake(0, 0, 24, 24);
[menuButton setImage:[UIImage imageNamed:@"menu-icon.png"] forState:UIControlStateNormal];
[menuButton addTarget:self.revealController action:@selector(revealToggle:) forControlEvents:UIControlEventTouchUpInside];
menuButton.hidden = isHide;
UIBarButtonItem *leftbarButton = [[UIBarButtonItem alloc] initWithCustomView:menuButton];
return leftbarButton;
}
self.navigationItem.rightBarButtonItems = @[[self getFirstBarbuttonItem:YES],[self getSecondBarbuttonItem:NO]];