Изменить цвет текста UISegmentedControl
Iam, новичок в объекте c, необходимо изменить цвет текста выбранного сегмента в UIsegmentControl.
Используется следующий код.
[[UIsegmentControl.subviews objectAtIndex:segment.selectedSegmentIndex] setTintColor:[UIColor redColor]];
он меняет цвет сегмента. Помогите мне пожалуйста.
Ответы
Ответ 1
Невозможно установить собственный цвет выделенного сегмента в UISegmentedControl
. UIControlState
в forState:
используется для установки атрибутов текста сегмента для обычного и выбранного состояний.
Из вашего кода:
[[UIsegmentControl.subviews objectAtIndex:segment.selectedSegmentIndex] setTintColor:[UIColor redColor]];
Попробуйте этот код:
[segmnt_cntrl setTitleTextAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Arial" size:16.0],
NSForegroundColorAttributeName:[UIColor redColor],
NSShadowAttributeName:shadow}
forState:UIControlStateNormal];
Замените segmnt_cntrl вашим объектом Segment Cotrol. Попробуйте это, это может помочь вам достичь вашей цели.
Спасибо
Ответ 2
Если вам нужно изменить цвет текста выделенного сегмента в iOS 7, вот решение (мне понадобилось некоторое время, чтобы найти, но благодаря этому сообщению)
[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor colorBlack]} forState:UIControlStateSelected];
Ответ 3
Со ссылками на @i-- Ответить
Обновлен Swift 4.1
UISegmentedControl.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.red], for: .selected)
Swift 3.1
UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red as Any], for: .selected)
Для более ранней версии Swift:
UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red], for: .selected)
Ответ 4
Нет стандартного API для установки текстовых атрибутов одного сегмента в UISegmentedControl. Вы можете сделать необоснованный подход копания в иерархию представления сегментированного элемента управления, найти нужный UILabel (если есть) и установить эти атрибуты метки. Лучшим подходом является поиск (или запись) настраиваемого элемента управления, который эмулирует UISegmentedControl и позволяет настраивать один сегмент так, как вам нужно.
Edit:
Собственно, я смотрел на это с неправильной точки зрения. Мой ответ основывался на попытке установить атрибуты для определенного индекса сегмента. Но на самом деле этого можно добиться, установив атрибуты текста для состояния UIControlStateSelected
. Извините за путаницу.
Ответ 5
Обновлен ответ @Babul Prabhakar для Swift 3, потому что изменилось около полудюжины крошечных вещей:
UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red as Any], for: .selected)
Ответ 6
Вы можете использовать HMSegmentedControl для всех трюков и лечения.
Смена шрифта с помощью HMsegmentedController слишком проста.
В функции для установки HMSegmentedController добавьте словарь, описывающий атрибуты, и передайте его в свойство selectedTitleTextAttributes, пример кода приведен ниже.
-(void)setHMSegmentController {
[self.segmentView setSectionTitles:@[@"COURSES", @"ASSESSMENTS"]];
NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor blackColor] forKey:NSForegroundColorAttributeName];
self.segmentView.selectedTitleTextAttributes = highlightedAttributes;
[self.segmentView addTarget:self action:@selector(segmentedControlChangedValue:) forControlEvents:UIControlEventValueChanged];
}
Использование этой выбранной вкладки будет выделено черным цветом.
Ответ 7
В дополнение к ответу @Babl Prabhakar
Swift 5: UISegmentedControl.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for:.selected)