2012-01-27 2 views
45

Я пытаюсь изменить цвет шрифта от белого до черного для UISegmentedControl (для прошивки 4. *)Как изменить цвет шрифта в UISegmentedControl

UISegmentedControl *button = [[[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:itemTitle, nil]] autorelease]; 
button.momentary = YES; 
button.segmentedControlStyle = UISegmentedControlStyleBar; 
button.tintColor = [UIColor redColor];  
for (id segment in [button subviews]) { 
    for (id label in [segment subviews]) { 
     if ([label isKindOfClass:[UILabel class]]) { 
      UILabel *titleLabel = (UILabel *) label; 
      [titleLabel setTextColor:[UIColor blackColor]]; 
     } 
    } 
} 
UIBarButtonItem *barButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 

Но цвета текста не изменилось. Что я должен сделать для изменения цвета текста для UISegmentedControl?

ответ

28

Ниже приведен код, чтобы установить шрифт жирного лица и точку размер:

UIFont *Boldfont = [UIFont boldSystemFontOfSize:12.0f]; 
NSDictionary *attributes = [NSDictionary dictionaryWithObject:Boldfont 
                 forKey: NSFontAttributeName]; 
[segmentedControl setTitleTextAttributes:attributes 
           forState:UIControlStateNormal]; 

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

+4

Внимание: этот ответ требует IOS 5. – Costique

+1

Этот ответ не меняет цвет шрифта в качестве темы пускатель просил, только размер шрифта. Ответ pbibergal более полный. –

+0

Это работает, но предупреждение UITextAttributeFont устарело. Вместо этого используйте «NSFontAttributeName». Все спасибо @johngraham от http://stackoverflow.com/questions/2280391/change-font-size-of-uisegmentedcontrol – mavericks

7
for (UIView *v in [[[segment subviews] objectAtIndex:0] subviews]) { 
    if ([v isKindOfClass:[UILabel class]]) { 
     UILabel *label=(UILabel *)[v retain]; 
     lable.textColor=[UIColor blackColor]; 
    } 
} 

для прошивки 3.0 и выше

+5

Предупреждение: вы не должны сохранять ярлык. – Costique

+0

Не работает на iOS 6 – CommaToast

+0

Также не работает на iOS 10 –

1

Im используя MonoTouch , Не знаю, почему, но когда View был нажат, цвет текста не изменился для меня. для решения этой проблемы им просто добавить ярлыки для управления сегментом надтаблицы, а затем изменить их цвет:

public static void SetColoredTittles(this UISegmentedControl s, string[] titles, UIColor selected, UIColor notSelected) 
{ 
    var segmentedLabels = new List<UILabel>(); 
    float width = s.Frame.Width/titles.Length; 

    for (int i = 0; i < titles.Length; i++) 
    { 
     var frame = new RectangleF(s.Frame.X + i*width, s.Frame.Y, width,s.Frame.Height); 
     UILabel label = new UILabel(frame); 
     label.TextAlignment = UITextAlignment.Center; 
     label.BackgroundColor = UIColor.Clear; 
     label.Font = UIFont.BoldSystemFontOfSize(12f); 
     label.Text = titles[i]; 
     s.Superview.AddSubview(label); 
     segmentedLabels.Add(label); 
    } 

    s.ValueChanged += delegate 
    { 
     TextColorChange(s,segmentedLabels, selected, notSelected); 
    }; 
    TextColorChange(s,segmentedLabels, selected, notSelected); 
} 

static void TextColorChange(UISegmentedControl s, List<UILabel> segmentedLabels, UIColor selected, UIColor notSelected) 
{ 
    for (int i = 0; i < segmentedLabels.Count; i++) 
    { 
     if(i == s.SelectedSegment) segmentedLabels[i].TextColor = selected; 
     else segmentedLabels[i].TextColor = notSelected; 
    } 
} 

, а затем использовать его

segmented.SetColoredTittles(new string[] { 
      "text1", 
      "text2", 
      "text3" 
     }, UIColor.White,UIColor.DarkGray); 
107

В прошивкой 6.0 и выше него очень просто:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
          [UIFont boldSystemFontOfSize:17], NSFontAttributeName, 
          [UIColor blackColor], NSForegroundColorAttributeName, 
          nil]; 
[_segmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
NSDictionary *highlightedAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]; 
[_segmentedControl setTitleTextAttributes:highlightedAttributes forState:UIControlStateSelected]; 
+0

какие-либо идеи по изменению типа шрифта? –

+0

'[UIFont fontWithName: @" HelveticaNeue "size: 17.0f]' – pbibergal

+0

Любые идеи, что может заставить это не работать? В качестве эксперимента я установил цвет текста зеленым, но все по-прежнему по умолчанию (серый текст на бледно-сером фоне или белый текст на синем фоне, если выделено. Это iOS6. IOS7 по умолчанию - белый/прозрачный.) Спасибо! – Olie

57

Если вам нужно изменить цвет текста выделенного сегмента в iOS 7, вот решение (мне понадобилось некоторое время, чтобы найти, но thanks to this post):

Objective-C

[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateSelected]; 

Swift

let titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] 
    UISegmentedControl.appearance().setTitleTextAttributes(titleTextAttributes, forState: .Selected) 
+0

Отлично. Вы можете следить за подробной информацией по адресу http://datacalculation.blogspot.in/2014/10/how-to-change-uisegmentedcontrol-text.html –

+2

Я редактирую ваш хороший ответ, чтобы добавить быстрый код –

+0

Этот ответ помог мне, наконец, завершить требования к кнопке выбора моего приложения, ранее включавшей способ держать сегментированный элемент управления в супер-uiview, чтобы сделать границу. –

2

В прошивкой 5.0, а затем вы можете использовать titleTextAttributes настроить UISegmentedControl объекты:

NSDictionary *segmentedControlTextAttributes = @{NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue" size:18.0], NSForegroundColorAttributeName:[UIColor whiteColor]}; 
[self.segmentedControl setTitleTextAttributes:segmentedControlTextAttributes forState:UIControlStateNormal]; 
[self.segmentedControl setTitleTextAttributes:segmentedControlTextAttributes forState:UIControlStateHighlighted]; 
[self.segmentedControl setTitleTextAttributes:segmentedControlTextAttributes forState:UIControlStateSelected]; 

Здесь я установил фон t к пользовательскому шрифту, размеру шрифта, цвету для каждого состояния UISegmentedControl.

Вы найдете всевозможные простые настройки в разделе Customizing Appearance справочника класса UISegmentedControl.

4

На всякий случай, чтобы помочь кому-то еще, кто туда и работает, работает быстро.

Я поставлю два возможных способа сделать это. Вы можете изменить текстовые атрибуты в UIAppearance или непосредственно в сегментированных, которые вы работаете.

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

let attributes = [ NSForegroundColorAttributeName : UIColor.grayColor(), 
     NSFontAttributeName : UIFont.systemFontOfSize(20)]; 
    let attributesSelected = [ NSForegroundColorAttributeName : UIColor.blueColor(), 
     NSFontAttributeName : UIFont.systemFontOfSize(20)]; 
    UISegmentedControl.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal) 
    UISegmentedControl.appearance().setTitleTextAttributes(attributesSelected, forState: UIControlState.Selected) 

Второй пример, непосредственно в сегментирован, подгоняем только это сегментирован:

let attributes = [ NSForegroundColorAttributeName : UIColor.grayColor(), 
     NSFontAttributeName : UIFont.systemFontOfSize(20)]; 
    let attributesSelected = [ NSForegroundColorAttributeName : UIColor.blueColor(), 
     NSFontAttributeName : UIFont.systemFontOfSize(20)]; 
    segmented.setTitleTextAttributes(attributes, forState: UIControlState.Normal) 
    segmented.setTitleTextAttributes(attributesSelected, forState: UIControlState.Selected) 
4

быстры 3,2:

let attributes = [ 
          NSFontAttributeName : bigTextFont, 
          NSForegroundColorAttributeName : UIColor.blue, 
          ]   
segmentedControl?.setTitleTextAttributes(attributes, for: .normal) 

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

segmentedControl!.layer.cornerRadius = 4.0 
segmentedControl!.clipsToBounds = true 
1

Swift 4 кода, чтобы установить оба государство, цвет шрифта для черный

let titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black] 
    segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .normal) 
    segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .selected) 
Смежные вопросы