Изменить цвет текста 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)