Как установить UIBarButtonItem выбранный или выделенный цвет изображения или оттенка в iOS 7?
Как обеспечить нормальное состояние и выбранные/выделенные изображения состояния для uibarbuttonitem в iOS 7? Есть ли способ предоставить цвет оттенка как для обычного, так и для выбранного/выделенного состояния uibarbuttonitem?
Я не хочу использовать uibutton как представление для uibarbuttonitem! Любое изящное решение было бы высоко оценено.
Ответы
Ответ 1
Вы можете использовать UIButton
как customView
для UIBarButtonItem
и иметь два разных фоновых изображения для состояния normal
и selected
UIButton. Затем, когда кнопка нажата, вы можете просто установить состояние selected
на YES
или 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];
Затем ваш метод, когда нажата кнопка, измените состояние
- (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
}
Ответ 2
Вы можете сделать это, используя Справка протокола UIAppearance
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:options forState:UIControlStateNormal];
Вам также может потребоваться использовать:
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
Ответ 3
В соответствии с этим ответом, я сделал что-то дополнительное и вроде бы для вас ответ. У меня есть свой пользовательский UITabBarController, который связан с моим UITabBarController в файле StoryBoard. Поэтому, чтобы удалить автоматический оттенок, предоставленный iOS, когда TabBar не выбран, я в конечном итоге удалил его таким образом. Изображения могут быть самыми разнообразными изображениями, но как раз в рекомендуется здесь. Вот оно:
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];
Поэтому, перемещаясь с этой вкладки на другую и оставляя ее в невыбранном (сером по умолчанию) оттенке, вы можете установить его на предоставленное изображение. К счастью, это работает как шарм (: