2014-01-22 2 views
2

У меня проблема на моей панели навигации. UIBarButtonItemtintColor - оранжевый, но когда я представляю popover, barButtonItemtintColor меняется на светGray. Цвет оттенка панели навигации - белый. Мне нужно оставить оранжевый цвет после подарка. Может кто-нибудь мне помочь? Спасибо!iOS 7 popover охватывает прогрессбар и barbuttonItem оттенок цвет

EDIT 1

я сделать выбор barButtonItem и у меня есть подкласс UIBarButtonItem:

-(void)setSelected:(BOOL)selected { 
    _selected = selected; 
    if (selected) { 
     self.tintColor = self.selectedColor; 
    } else { 
     self.tintColor = self.defaultColor; 
    } 
} 

-(id)initWithImage:(UIImage *)image style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action defaultColor:(UIColor *)defaultColor { 
    self = [super initWithImage:image style:style target:target action:action]; 
    if (self) { 
     self.tintColor = defaultColor; 
    } 
    return self; 
} 

-(id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action defaultColor:(UIColor *)defaultColor { 
    self = [super initWithTitle:title style:style target:target action:action]; 
    if (self) { 
     self.tintColor = defaultColor; 
    } 
    return self; 
} 

EDIT 2

Thanx Уоррен Бертон для ответа, решение:

self.navigationController.navigationBar.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

ответ

4

Это поведение iOS 7 «Нормальный». Он сообщает вашему пользователю, что кнопка в данный момент не является частью вашего активного интерфейса.

Если вы хотите, чтобы обойти эту обычную конвенцию вы можете создать подкласс UIBarButtonItem и переопределить

- (void)tintColorDidChange

просто оставить пустую реализацию.

- (void)tintColorDidChange { 
    //nothing to see here, move along 
} 

когда поповер представляет вид ПРЕДСТАВЛЕНИЯ идет к tintMode UIViewTintAdjustmentModeDimmed так что даже если вы предоставите другой цвет, цвет получает неактивно-аут (ненасыщенный?) По системе.

вот почему вам нужно преодолеть tintColorDidChange, чтобы заблокировать это.

из документации ...

Если значение этого свойства равно UIViewTintAdjustmentModeDimmed, значение свойства tintColor модифицируется, чтобы обеспечить затемненную внешний вид.

+0

Я отредактировал мой вопрос. Мне нужно изменить tintColor, когда я нажимаю кнопку на панели, но когда появляется popover - мне нужно предотвратить изменение цвета –

+0

см. Править - объясняет –

+0

Спасибо, это помогает мне! –

0

Я решить мою проблему, изменив цвет системного элемента кнопки бар PNG файл во внешнем редакторе, в том числе и этот образ проекта и загрузить его через

[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"UIButtonBarTrashBlack"] style:UIBarButtonItemStyleBordered target:self action:@selector(myAction)]; 

Я нашел внутренний с помощью полезного UIKit-Artwork-Extractor.

Я отредактировал цвет иллюстрации с помощью бесплатного программного обеспечения GIMP.

0

Это похоже на ошибку Apple, и вы должны ввести ошибку на нее с репортером ошибок. То есть, я могу дать вам относительно безболезненно обходной путь: добавить этот код в ваш RecipetTableViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.title = @"Recipe Book"; 

    UIBarButtonItem *it = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStylePlain target:nil action:NULL]; 
    UIImage * btBack_30 = [[UIImage imageNamed:@"btBack_30"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)]; 
    [it setBackButtonBackgroundImage:btBack_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    self.navigationItem.backBarButtonItem = it; 
} 

EDIT: Вы можете DUP эту ошибку, если интересно, тем больше ошибок ссылаться на него тем более вероятно, яблоко будет исправить:

Реферат: Установка прокси для внешнего вида UIBarButtonItem для элемента кнопки задней панели не влияет на второй вид кнопки.

Шаги по воспроизведению: В AppDelegate до появилось что-то, добавить эти высказывания:

UIImage * gradientImage44 = [[UIImage imageNamed:@"navBar_44"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
UIImage * gradientImage32 = [[UIImage imageNamed:@"navBar_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
// Set the background image for all UINavigationBars [[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone]; 

Ожидаемые результаты: Когда ViewController сначала нажата, его кнопка назад имеет изображение в нем.

Фактические результаты: При первом появлении изображения нет. Нажмите снова и снова. Фактически это появляется, когда вы нажимаете на кнопку в первый раз, но не при первой кнопке.

Версия: Xcode 5.0.1, IOS 7.0.3

Примечание: Добавление этого в корневом контроллере представления навигационного контроллера делает его работу:

-(void)viewDidLoad 
{ 
[super viewDidLoad]; 

self.title = @"Recipe Book"; 
UIBarButtonItem *it = [[UIBarButtonItem alloc] initWithTitle:self.title style:UIBarButtonItemStylePlain target:nil action:NULL]; 
UIImage * btBack_30 = [[UIImage imageNamed:@"btBack_30"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)]; 
[it setBackButtonBackgroundImage:btBack_30 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; self.navigationItem.backBarButtonItem = it; 
} 

С Днем Coding !!!

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