2013-10-11 10 views
11

Come fornire lo stato normale e le immagini dello stato selezionato/evidenziato su uibarbuttonitem in iOS 7? C'è un modo per fornire il colore della tinta per lo stato normale e selezionato/evidenziato di uibarbuttonitem?come impostare UIBarButtonItem selezionato o evidenziato i colori dell'immagine o della tinta in iOS 7?

Non voglio usare uibutton come vista per uibarbuttonitem! Qualsiasi soluzione elegante sarebbe molto apprezzata.

+1

Mi chiedo anche se ci sia modo di farlo: la vista personalizzata con UIButton è la soluzione più vicina che io conosca, ma non può gestire metriche della barra diverse.Io –

+0

è giusto. attraverso qualsiasi soluzione possibile per questo comportamento desiderato. –

risposta

1

È possibile eseguire questa operazione utilizzando il UIAppearance Protocol Reference

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil]; 

[[UIBarButtonItem appearance] setTitleTextAttributes:options forState:UIControlStateNormal]; 

Si potrebbe anche essere necessario utilizzare:

[[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
2

È possibile utilizzare un UIButton come customView di un UIBarButtonItem e hanno due immagini di sfondo diverse per a normal e selected stato di UIButton. Quindi, quando si tocca il pulsante, è possibile impostare lo stato selected su YES o NO.

// Build right bar button 
UIImage *normalButtonImage = [UIImage imageNamed:@"normal-button"]; 
UIImage *selectedButtonImage = [UIImage imageNamed:@"selected-button"]; 
CGRect rightButtonFrame = CGRectMake(0, 0, normalButtonImage.size.width, 
              normalButtonImage.size.height); 
UIButton *rightButton = [[UIButton alloc] initWithFrame:rightButtonFrame]; 
[rightButton setBackgroundImage:normalButtonImage forState:UIControlStateNormal]; 
[rightButton setBackgroundImage:selectedButtonImage forState:UIControlStateSelected]; 
[rightButton addTarget:self action:@selector(rightBarButtonPress) 
     forControlEvents:UIControlEventTouchDown]; 
[orientationButton setShowsTouchWhenHighlighted:YES]; 
[orientationButton setSelected:NO]; 
UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:rightButton]; 
[self.navigationItem setRightBarButtonItem:rightBarButton]; 

Allora il tuo metodo per quando il pulsante viene premuto, modificare lo stato

- (void)rightBarButtonPress 
{ 
    //toggle selected state of button 
    UIBarButtonItem *rightBarButton = self.navigationItem.rightBarButtonItem; 
    UIButton *button = (UIButton *)rightBarButton.customView; 
    [button setSelected:!button.selected]; 

    //do whatever else you gotta do 
} 
1

Secondo this answer, ho fatto qualcosa in più e il tipo di avere una risposta per voi qui. Ho il mio UITabBarController personalizzato, che è collegato con il mio UITabBarController nel file StoryBoard. Quindi, al fine di rimuovere la tinta automatica fornita da iOS quando il TabBar non è selezionato, ho finito per rimuoverlo in questo modo. Le immagini possono essere una vasta gamma di immagini, ma solo nel modo in cui recommended here. Qui si va:

NSArray *navConArr = self.viewControllers;//self is custom UITabBarController 
UINavigationController *naviOne = [navConArr objectAtIndex:0];//I have 3 different tabs, objectAtIndex:0 means the first tab navigation controller 
UITabBarItem *naviBtn = naviOne.tabBarItem; 
UIImage *image = [[UIImage imageNamed:@"iconNaviOne"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
[naviBtn setSelectedImage:image]; 
[naviBtn setImage:image]; 

Così quando si spostano da questa scheda per l'altro e lasciare questo nella (grigio come impostazione predefinita) la tinta non selezionato, è possibile impostare l'immagine fornita. Per fortuna, funziona come un incantesimo (:

Problemi correlati