2013-10-11 10 views
11

Wie kann man in iOS 7 einen normalen Status und ausgewählte/markierte Statusbilder an uibarbuttonitem bereitstellen? Gibt es eine Möglichkeit, eine Farbtonfarbe für den normalen und ausgewählten/hervorgehobenen Zustand von uibarbuttonitem bereitzustellen?wie UIBarButtonItem ausgewählte oder markierte Bild- oder Tönungsfarben in iOS 7 einstellen?

Ich möchte nicht Uibutton als eine Ansicht für uibarbuttonitem verwenden! Jede elegante Lösung würde sehr geschätzt werden.

+1

Ich frage mich auch, ob es eine Möglichkeit gibt, dies zu tun. Benutzerdefinierte Ansicht mit UIButton ist die nächstgelegene Lösung, die ich kenne, aber es kann nicht mit verschiedenen bar Metriken. –

+0

das ist richtig. Ich komme nie über jede mögliche Lösung für dieses gewünschte Verhalten. –

Antwort

1

Sie können dies mit dem UIAppearance Protocol Reference

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

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

Sie könnten auch verwenden:

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

Sie eine UIButton als customView eines UIBarButtonItem und andere Hintergrundbilder haben zwei verwenden können a normal und selected Zustand des UIButton. Wenn Sie dann auf die Schaltfläche tippen, können Sie den selected-Status einfach auf YES oder NO setzen.

// 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]; 

dann Ihre Methode zum, wenn die Schaltfläche geklickt wird, die

- (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

Nach this answer Zustand ändern, habe ich etwas extra und haben eine Art eine Antwort für Sie hier. Ich habe meinen benutzerdefinierten UITabBarController, der mit meinem UITabBarController in der StoryBoard-Datei verknüpft ist. Um den von iOS bereitgestellten automatischen Farbton zu entfernen, wenn die TabBar nicht ausgewählt ist, habe ich sie auf diese Weise entfernt. Die Bilder können eine große Vielfalt von Bildern sein, aber nur in der Art recommended here. Hier geht es:

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]; 

Also, wenn von diesen Registerkarte zum anderen und verlassen diese in der nicht ausgewählten (grau als Standard) Tönung zu bewegen, können Sie es auf das Bild zur Verfügung gestellt einstellen. Zum Glück funktioniert dies wie ein Charme (: