Как установить пользовательский цвет UINavigationBarButton - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь установить пользовательский цвет для кнопки на моем UINavigationBar, но только когда в нем отображается определенный UIViewController (я знаю, что это сомнительный дизайн пользовательского интерфейса, но это определенное требование клиента).

В нашей текущей реализации Swizzle используется для переопределения drawRect для всех UINavigationBar объектов.Это необходимо, чтобы наши пользовательские цвета панели навигации применялись к стандартным экранам iOS (например, при добавлении нового контакта через стандартные API-интерфейсы).

Я хочу изменить цвет оттенка панели навигации для одного конкретного UIViewController, чтобы он былотличается от других, но Swizzle всегда имеет приоритет.

Я тестирую в iOS 4.3 Simulator.Мы поддерживаем клиенты iOS 3.x и выше (iPhone, iPod и iPad), поэтому я не могу просто использовать новые API iOS 5 для его настройки.

Другие вещи, которые я пробовал, безуспешно:

  • Добавление setStyle вызовов (согласно этому обходному пути ) для повторного обновления кнопки.

  • Я попытался взломать UINavigationButton Я нашел здесь (я знаю, что это частный API и рискует, что Apple отклонит приложение).Я также пытался вставить этот код в viewWillAppear.

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Я получил это, чтобы работать, создав UIButton с пользовательским фоновым изображением, в соответствии с этим ответом Stackoverflow .

Если это кому-нибудь поможет, вот мой код:

#import <QuartzCore/QuartzCore.h>

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:[UIImage imageNamed:@"mybackground.png"] forState:UIControlStateNormal];
[button setTitle:NSLocalizedString(@"Login", @"Button (9 chars limit) - Login") forState:UIControlStateNormal];
button.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:12.0f];
[button.layer setCornerRadius:5.0f];
[button.layer setMasksToBounds:YES];
[button.layer setBorderWidth:1.0f];
[button.layer setBorderColor: [[UIColor grayColor] CGColor]];
button.frame=CGRectMake(0.0, 100.0, 60.0, 30.0);
[button addTarget:self action:@selector(myLoginActionMethod:) forControlEvents:UIControlEventTouchUpInside];

self._loginButton= [[UIBarButtonItem alloc] initWithCustomView:button]; 

В общем, я думаю, что лучше всего настроить оттенок в UIViewController следующим образом (хотя в моем случае это не работает из-за присутствия drawRect swizzle на UINavigationBar в моем коде):

self.navigationController.navigationBar.tintColor=[UIColor blueColor];
1 голос
/ 23 ноября 2011

Я думаю, что ответы на на этот вопрос ответят на ваши.Мой ответ, который использует UISegmentedControl, не требует каких-либо частных вызовов API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...