2015-10-29 2 views
1

Я реализовал два элемента кнопки с правой панелью на панели навигации в iOS9.0 с помощью xcode7, я хочу скрыть/показать одну кнопку правого бара с указанным условием. Я используя следующий code.please помочь мнеСкрыть/показать одну из двух кнопок в правой панели на панели навигации

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 

} 
+0

просто попробуйте [shareButton.customView removeFromSuperview], он отлично работает, только предложение – Spynet

ответ

0

Там нет собственности на родном UIBarButtonItem «.hidden».

Есть целый ряд возможных ответов, перечисленных in this very related question, и я думаю, что лучше для вас может быть, чтобы попытаться подклассами UIBarButtonItem (HidableBarButtonItem подкласс), только заменив заголовок с пустой строкой, если элемент должен быть скрыт ,

0

Попробуйте

-(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]]; 
+0

как скрыть одну из двух кнопок правого бара в self.navigationItem.rightBarButtonItems – IKKA

1

Попробуйте это:

-(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]; 
Смежные вопросы