2013-09-20 2 views
31

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

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

iOS 6.1

iOS 7

+2

Вы не должны использовать элемент панели кнопок в качестве кнопки возврата. Вместо этого установите «backIndicatorImage» для панели навигации. – Felix

+0

Приложение должно иметь одинаковый внешний вид во всех версиях iOS. 'backIndicatorImage' предназначен только для iOS 7. Я уже использую 'mask' в iOS 6 ' const float colorMask [6] = {222, 255, 222, 255, 222, 255}; UIImage * image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors ([[UIImage alloc] init] .CGImage, colorMask)]; [backButtonItem setBackgroundImage: image forState: UIControlStateNormal barMetrics: UIBarMetricsDefault]; ' – Majid

+0

Я использую ios5, могу ли помочь мне – chandru

ответ

22

Попробуйте установить UIBarButtonItem как этот путь в ios7: -

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

Вот оригинальный пост в яблочного Dev центре discussion Forums

Для поддержки обе версии 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]; 
} 
+0

Спасибо, это работает. Однако 'UIImageRenderingModeAlwaysOriginal' не работает в iOS 6, мне нужно было проверить версию iOS. 'UIImage * backImage = nil; если ([[[UIDevice текущийDevice] systemVersion] floatValue] <7.0) { заднийImage = [UIImage изображениеNamed: @ "btn-back.PNG "]; } еще { backImage = [[UIImage imageNamed: @" БТН-back.png "] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]; }' – Majid

+0

спасибо я просто изменить свой ответ на поддержку как версия, чтобы помочь им других своих –

+0

также незначительная вещь, вы должны отказаться от .png в своих изображениях. Таким образом, ios может забирать изображения сетчатки и изображения не сетчатки, а также изображения, специфичные для устройства. – Michael

0

// Добавление изображения в BUTTON

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

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

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

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

20

Следующие, по-видимому, несколько более полезны для людей, которые не хотят вмешиваться в существующее действие цели и т. Д. Просто скопируйте и вставьте. Кроме того, это заставляет 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 - имя вашего изображения.

38

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

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

Я хотел бы добавить, что customBackButton изображение должно использовать 'imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal', как этот' [[UIImage imageNamed: @ "imageName"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]; 'поэтому он может отображать цвет изображения. – Scar

+0

Не действителен для iOS 9: нет backIndicatorImage –

+2

@EugeneBraginets это определенно работает на iOS 9 – Sebastian

6

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

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

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

Он не работал, пока я не добавил «imageWithRenderingMode» ... спасибо! –

Смежные вопросы