2014-01-10 4 views
1

Настройка глобального оттенка в моем заголовке tableview не тонирует, как ожидалось, и кажется ошибкой.UISegmented Control Глобальный оттенок в заголовке навигационного контроллера

Когда я загружаю вид я получаю

enter image description here

Правая рука сохраняет цвет по умолчанию, однако, если нажать правую кнопку, и еще раз налево, он устанавливает, как вы бы ожидать, что это будет :

enter image description here

Эта проблема только с сегментированной управления в моей панели навигации. Глобальная тонировка работает, когда элемент управления встроен в «нормальный» вид.

У меня есть работа, которая решает проблему. Быть, я устанавливаю правый элемент управления, а затем обратно влево в viewDidLoad.

Так это ошибка? или я что-то пропустил? Благодарю.

Добавить: Я устанавливаю глобальный оттенок в раскадровке

enter image description here

+0

Уход за разъяснением голоса? – DogCoffee

ответ

1

Это не ошибка. Глобальная тонировка работает для объектов, класс которых используется для тонирования. Если определенная схема оттенков объявлена ​​для класса, тогда все элементы управления, принадлежащие этому классу, будут следовать схеме отображения класса, независимо от того, к какому виду они добавлены.

Я пробовал реализовать это & Я здесь с этим кодом.

Установить глобальный колеровка для UINavigationBar в appDelegate

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    [[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]]; 
    ... 
    ... 
} 

и я добавляю UISegmentControl в UINavigationBar, а также в tableView.tableHeaderView в viewDidLoad методе.

UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:@[@"One", @"Two"]]; 
segment.frame = CGRectMake(self.view.frame.size.width/2-75, 0, 150, 40); 
[self.navigationController.navigationBar addSubview:segment]; 

UISegmentedControl *tableSegment = [[UISegmentedControl alloc]initWithItems:@[@"One", @"Two"]]; 
tableSegment.frame = CGRectMake(self.view.frame.size.width/2-75, 0, 150, 40); 
[self.navigationController.navigationBar addSubview:tableSegment]; 
tableView.tableHeaderView = tableSegment; 

Это дает следующий результат. UISegmentControl будет тонированное с глобальным подкрасить UINavigationBar «s, если он будет добавлен в UINavigationBar контейнер как подвид, в противном случае, он будет принимать синий цвет по умолчанию вне UINavigationBar как в заголовке UITableView

UINavigationBar Tint

сейчас добавление определенного оттенка цвета для UISegmentedControl, как

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
    [[UINavigationBar appearance] setBarTintColor:[UIColor yellowColor]]; 
    [[UISegmentedControl appearance] setTintColor:[UIColor brownColor]]; 
    ... 
    ... 
} 

``

это дает это, UISegmentControl зависит от его глобального оттенка, независимо от его местоположения (например, ранее в UINavigationBar & UITableViewHeader).Это

UISegmentControl-Tint Color

Однако TinitColor из UInavigationBar по-прежнему применяется на leftBarButtonItem, потому что не существует глобальная система Оттенок объявлена ​​для UIBarButtonItem, поэтому она принятия tintColor контейнера он добавляется.

Добавление более кода Уточнить

  • Использования глобальных подкрашивать UISegmentedControl & никакой другой глобальной колеровки.

[[UISegmentedControl appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

Результат: Вы можете увидеть контроль сегмента, но обратите внимание на BackButton, который, имеющий оттенок по умолчанию UINavigationBar

SegmentControl Tint Only

  • Использование глобальной подкрашивать UISegmentedControl & UINavigationBar

[[UISegmentedControl appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:39.0/255.0 green:64.0/255.0 blue:112.0/255.0 alpha:1]];

Результат: Вы можете увидеть контрольный сегмент оттенок & также заметить BackButton, который оказывает Глобальный оттенок UINavigationBar

UISegmentedControl_ UINavigationBar_tintColor

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

Я надеюсь, что это поможет.

+0

Спасибо, но почему половина установленного управления будет установлена ​​на глобальный оттенок? Все это должно быть установлено на глобальный оттенок. И почему, как только я нажимаю на него, он затем переходит к глобальному оттенку. – DogCoffee

+0

Просьба направить код, добавленный в качестве обновления для ответа. Думаю, у вас есть кое-что лишнее в коде, что создает некоторые конфликты. Тогда поделитесь своим кодом. –

+0

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

1

Недавно у меня была большая проблема с тонированием в Xcode 5.0.2. Я играл с обоими Global Tint и Tint для различных предметов, когда наследование tintColor прекратило работать правильно. Я закончил тем, что очистил файл Strawboard XML вручную, чтобы исправить ситуацию.

Если вы не используете магию в своем приложении, это наверняка выглядит как ошибка для меня.

+0

Я согласен с рудольфом. – DogCoffee

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