2016-09-22 1 views
1

Ich habe versucht, UISegmentControl anpassen wie folgt aussehen:uisegment Steuerung mit diff Textgröße

enter image description here

Zuerst habe ich eine Schleife durch die Etiketten in UISegmentControl und stellen jeweils mehrzeilige, aber wenn ich versuche, Ändern Sie die Beschriftungstextattribute ändert es nicht die Schriftart. Ich habe versucht, dieses Attribut auf einem normalen UILabel verwenden und es funktioniert, aber nicht innerhalb 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; 
      } 
     }]; 
    }]; 

Dies ist das Ergebnis:

enter image description here

ändern Label Attribut angebracht Werke lesen:

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 Links zu Attribut ändern: Different font size in the same label?

Antwort

1

UISegmentedControl unterstützt nicht, was Sie versuchen zu tun. Die API unterstützt nur die Einstellung einer einzelnen Schriftart für alle Titel des Segments mit der Methode 'setTitleTextAttributes: forState: `.

Letztendlich wird das segmentierte Steuerelement alle Attribute zurücksetzen, die Sie nach dem Durchsuchen der privaten Subviews festgelegt haben. Es ist nie eine gute Idee, eine API zu bekämpfen, noch ist es eine gute Idee, sich mit den nicht dokumentierten Subviews einer Ansicht zu beschäftigen. Solche Lösungen können manchmal funktionieren, aber die meisten sind zum Scheitern verurteilt, wenn ein zukünftiges iOS-Update verfügbar ist.

Ihre einzige Option besteht darin, Ihr eigenes benutzerdefiniertes Steuerelement zu erstellen, das das tut, was Sie wollen, oder eines, das von jemand anderem erstellt wurde.

1

Tun Sie das nicht. Eine segmentierte Steuerung soll so wie sie ist verwendet werden. Die Hierarchie der internen Ansicht ist privat und kann zwischen den Betriebssystemversionen geändert werden. Wenn man in die Kontrolle greift und herumfummelt, sind alle Wetten ausgeschaltet. Selbst wenn Sie es heute funktionieren, könnte jede zukünftige Betriebssystemversion Sie brechen.

Wenn Sie ein segmentiertes Steuerelement anpassen möchten, bauen Sie es von Grund auf neu. Es ist nicht so schwer. In der Tat wird es wahrscheinlich einfacher als das, was Sie versuchen, und sicherlich viel sicherer.