2016-09-22 5 views
1

Я пытался настроить UISegmentControl выглядеть следующим образом:uisegment управления размером дифф текста

enter image description here

Сначала я Переберите этикетки в UISegmentControl и установить каждый в многострочный, но когда я пытаюсь измените атрибуты текста метки, они не меняют шрифт. Я попытался с помощью этого атрибута на обычный UILabel, и она работает, но не в uisegment

[segmentedControl.subviews enumerateObjectsUsingBlock:^(UIView * obj, NSUInteger idx, BOOL *stop) { 
     [obj.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
      if ([obj isKindOfClass:[UILabel class]]) { 
       //Multiline 
       UILabel *_tempLabel = (UILabel *)obj; 
       [_tempLabel setNumberOfLines:0]; 

       NSMutableAttributedString *attString = 
          [[NSMutableAttributedString alloc] 
            initWithString: @"monkey goat"]; 

[attString addAttribute: NSForegroundColorAttributeName 
       value: [UIColor redColor] 
       range: NSMakeRange(0,6)]; 


[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Helvetica" size:15] 
       range: NSMakeRange(0,6)]; 

[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Didot" size:24] 
       range: NSMakeRange(7,4)]; 

_tempLabel.attributedText = attString; 
      } 
     }]; 
    }]; 

Это результат:

enter image description here

Изменения атрибутов наклейки для просмотра работ:

NSMutableAttributedString *attString = 
          [[NSMutableAttributedString alloc] 
            initWithString: @"monkey goat"]; 

[attString addAttribute: NSForegroundColorAttributeName 
       value: [UIColor redColor] 
       range: NSMakeRange(0,6)]; 


[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Helvetica" size:15] 
       range: NSMakeRange(0,6)]; 

[attString addAttribute: NSFontAttributeName 
       value: [UIFont fontWithName:@"Didot" size:24] 
       range: NSMakeRange(7,4)]; 

self.label.attributedText = attString; 

SO ссылки для изменения этикеток: Different font size in the same label?

ответ

1

UISegmentedControl не поддерживает то, что вы пытаетесь сделать. API поддерживает только установку одного шрифта для всех заголовков сегмента с помощью метода setTitleTextAttributes: forState:.

В конечном счете, сегментированный элемент управления сбрасывает все атрибуты, которые вы могли бы установить после проскальзывания через частные подпункты. Никогда не рекомендуется сражаться с API, и не всегда полезно заглядывать в недокументированные подсмотры. Такие решения могут работать в разы, но большинство из них обречено сломаться, когда будет доступно новое обновление iOS.

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

1

Не делайте этого. Сегментированное управление предназначено для использования как есть. Внутренняя иерархия представлений является частной и может быть изменена между версиями ОС. Добиваясь внутри контроля и выкидывания, все ставки отключены. Даже если вы заработаете сегодня, любая будущая версия ОС может сломать вас.

Если вы хотите настроить сегментированный элемент управления, создайте его самостоятельно с нуля. Это не так сложно. На самом деле это, вероятно, будет легче, чем то, что вы пытаетесь сделать, и, безусловно, гораздо безопаснее.

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