Я пытаюсь установить фоновое изображение для кнопки "Назад" в нормальных и подсвеченных состояниях.
- (void)configureBackButtonInNavigationItem:(UINavigationItem *)item
{
UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"back"
style:UIBarButtonItemStyleBordered target:nil action:NULL];
[backBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateNormal];
[backBarButtonItem setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateHighlighted];
// white arrow image
UIImage *normalImage = [[[UIImage imageNamed:@"btn_normal"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] resizableImageWithCapInsets:UIEdgeInsetsMake(0.f, 17.f, 0.f, 0.f)];
// orange arrow image
UIImage *pressedImage = [[[UIImage imageNamed:@"btn_on_press"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] resizableImageWithCapInsets:UIEdgeInsetsMake(0.f, 17.f, 0.f, 0.f)];
[backBarButtonItem setBackButtonBackgroundImage:normalImage
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[backBarButtonItem setBackButtonBackgroundImage:pressedImage
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[backBarButtonItem setBackgroundImage:normalImage
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[backBarButtonItem setBackgroundImage:pressedImage
forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
NSLog(@"NORMAL: %@ HIGHLIGHTED: %@", [backBarButtonItem backButtonBackgroundImageForState:UIControlStateNormal barMetrics:UIBarMetricsDefault],
[backBarButtonItem backButtonBackgroundImageForState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]);
item.backBarButtonItem = backBarButtonItem;
NSLog(@"NORMAL: %@ HIGHLIGHTED: %@", [backBarButtonItem backButtonBackgroundImageForState:UIControlStateNormal barMetrics:UIBarMetricsDefault],
[backBarButtonItem backButtonBackgroundImageForState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]);
}
Выход следующий:
NORMAL: <_UIResizableImage: 0x16b55e10> HIGHLIGHTED: <_UIResizableImage: 0x16b593d0>
NORMAL: <_UIResizableImage: 0x16b55e10> HIGHLIGHTED: <_UIResizableImage: 0x16b593d0>
Но наблюдаемый результат для выделенного состояния - это просто затемнение того, что было настроено на нормальное состояние, вместо того, чтобы использовать правильное выделенное изображение.
Normal:
Выделен (стрелка по-прежнему белая, кнопка затемняется неожиданно):
Пожалуйста, не публикуйте ответы на вопрос об использовании leftBarButtonItem или UIButton в качестве пользовательского представления. Оба этих подхода управляют движением пальца в обратном направлении, доступным на iOS 7.
UPD: заполненный радар # 17481106 по этому вопросу.
UPD2: радар # 17481106 исправлен в iOS 8.