Пользовательское изображение для кнопки UINavigation Back в iOS 7

У меня есть пользовательский UIBarButtonItem образ, который отлично работает в iOS 6.1. Но iOS 7 имеет tintColor и накладывает этот цвет на мое изображение. Если я установил tintColor в [UIColor clearColor], кнопка не будет отображаться вместе.

Как я могу открыть свою кнопку в iOS 7, как в iOS 6? Пожалуйста, помогите?

iOS 6.1

iOS 7

Ответ 1

Попробуйте установить UIBarButtonItem следующим образом в ios7: -

UIImage *temp = [[UIImage imageNamed:@"theImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:temp style:UIBarButtonItemStyleBordered target:self action:@selector(action)];

Вот оригинальный пост в apple Dev center обсуждение форумов

Для поддержки как версии iOS7, так и ниже, вы проверяете system-version и устанавливаете код следующим образом: -

UIImage *temp=nil;

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{ 
    temp = [UIImage imageNamed:@"btn-back.png"]; 
}
else
{ 
    temp = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
 }

Ответ 2

Вы должны использовать внешний вид в UINavigationBar, чтобы глобально установить пользовательскую кнопку возврата.

[UINavigationBar appearance].backIndicatorImage = customBackButton;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = customBackButton;

Ответ 3

Следующее, по-видимому, немного более полезно для людей, которые не хотят связываться с существующим целевым действием и т.д. Просто скопируйте и вставьте. Кроме того, это заставляет iOS использовать ваше изображение со всеми его лотками - в отличие от простого использования шаблона/впечатления от изображения.

- (void)setCustomNavigationBackButton
{
    UIImage *backBtn = [UIImage imageNamed:@"arrow"];
    backBtn = [backBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [email protected]"";
    self.navigationController.navigationBar.backIndicatorImage = backBtn;
    self.navigationController.navigationBar.backIndicatorTransitionMaskImage = backBtn;
}

arrow - это имя вашего изображения.

Ответ 4

Попробуйте так:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"yourImageName.png"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"yourImageName.png"];

Это создаст маску изображения в глобальном цвете оттенка, который даст вам свой собственный значок. Не работает для цветных изображений.

Ответ 5

быстрая версия:

var backBtn = UIImage(named: "return_menu")
backBtn = backBtn?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

self.navigationController!.navigationBar.backIndicatorImage = backBtn;
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtn;

Ответ 6

//ДОБАВЛЕНИЕ ИЗОБРАЖЕНИЯ К КНОПКЕ

UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
[refreshButton setFrame:CGRectMake(0,0,30,30)];
refreshButton.userInteractionEnabled = YES;
[refreshButton setImage:[UIImage imageNamed:@"yourimage.jpg"] forState:UIControlStateNormal];

// ASSIGNING THE BUTTON WITH IMAGE TO BACK BAR BUTTON

UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
self.navigationItem.leftBarButtonItem = refreshBarButton;