Ich versuche, die Schriftfarbe für UISegmentedControl
(für iOS 4. *) von Weiß auf Schwarz zu ändern.
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];
Die Textfarbe ändert sich jedoch nicht. Was soll ich tun, um die Textfarbe zu ändern UISegmentedControl
?
[UIFont fontWithName:@"HelveticaNeue" size:17.0f]
UIControlStateHighlighted
bis ändernUIControlStateSelected
, um den gewünschten Effekt zu erzielen.Wenn Sie die Textfarbe des hervorgehobenen Segments in iOS 7 ändern müssen, finden Sie hier eine Lösung (es hat eine Weile gedauert, bis ich sie gefunden habe, aber dank dieses Beitrags ):
Ziel c
[[UISegmentedControl appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateSelected];
Schnell
let titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()] UISegmentedControl.appearance().setTitleTextAttributes(titleTextAttributes, forState: .Selected)
quelle
Code, um die Schriftfarbe beider Zustände auf Schwarz zu setzen
Swift 5
let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black] segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .normal) segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .selected)
Swift 4
let titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black] segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .normal) segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .selected)
quelle
segmentedControl
mehr erkennenUnten finden Sie den Code zum Festlegen der Schriftart auf Fettdruck und Punktgröße:
UIFont *Boldfont = [UIFont boldSystemFontOfSize:12.0f]; NSDictionary *attributes = [NSDictionary dictionaryWithObject:Boldfont forKey: NSFontAttributeName]; [segmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal];
Ich hoffe, es hilft
quelle
Aktualisiert für iOS 13:
extension UISegmentedControl { func defaultConfiguration(font: UIFont = UIFont.systemFont(ofSize: 12), color: UIColor = UIColor.white) { let defaultAttributes = [ NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: color ] setTitleTextAttributes(defaultAttributes, for: .normal) } func selectedConfiguration(font: UIFont = UIFont.boldSystemFont(ofSize: 12), color: UIColor = UIColor.red) { let selectedAttributes = [ NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: color ] setTitleTextAttributes(selectedAttributes, for: .selected) } }
Aktualisiert für Swift 4 - Verwenden Sie diese Erweiterung (weil die Erweiterung immer fantastisch ist .. !!)
extension UISegmentedControl { func defaultConfiguration(font: UIFont = UIFont.systemFont(ofSize: 12), color: UIColor = UIColor.gray) { let defaultAttributes = [ NSAttributedStringKey.font.rawValue: font, NSAttributedStringKey.foregroundColor.rawValue: color ] setTitleTextAttributes(defaultAttributes, for: .normal) } func selectedConfiguration(font: UIFont = UIFont.boldSystemFont(ofSize: 12), color: UIColor = UIColor.red) { let selectedAttributes = [ NSAttributedStringKey.font.rawValue: font, NSAttributedStringKey.foregroundColor.rawValue: color ] setTitleTextAttributes(selectedAttributes, for: .selected) } }
und aus der jeweiligen Klasse können Sie diese Funktion verwenden,
@IBOutlet weak var segment: UISegmentedControl! segment.defaultConfiguration() // or provide paramater as per your requirement segment.selectedConfiguration(color: .blue)
quelle
for (UIView *v in [[[segment subviews] objectAtIndex:0] subviews]) { if ([v isKindOfClass:[UILabel class]]) { UILabel *label=(UILabel *)[v retain]; lable.textColor=[UIColor blackColor]; } }
für iOS 3.0 und höher
quelle
Nur für den Fall, dass Sie jemand anderem helfen, der dort ankommt und mit Swift arbeitet.
Ich werde die zwei möglichen Wege nennen. Sie können die Textattribute in
UIAppearance
oder direkt in dem Segment ändern, in dem Sie arbeiten.Im ersten Beispiel werden die Attribute in der Darstellung festgelegt. Auf diese Weise können Sie alle segmentierten Steuerelemente in Ihrer App anpassen:
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)
Im zweiten Beispiel direkt in der Segmentierung wird nur diese Segmentierung angepasst:
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)
quelle
schnell 3.2:
let attributes = [ NSFontAttributeName : bigTextFont, NSForegroundColorAttributeName : UIColor.blue, ] segmentedControl?.setTitleTextAttributes(attributes, for: .normal)
Hinweis: Wenn Sie eine benutzerdefinierte Hintergrundfarbe verwenden, wird in den Ecken ein Fehler angezeigt (Farbe füllt äußere Segmente aus.). Verwenden Sie daher diese Linie, um sie zu beschneiden:
segmentedControl!.layer.cornerRadius = 4.0 segmentedControl!.clipsToBounds = true
quelle
In Swift 5 können Sie mit dieser Syntax die Farbe ändern
Swift 5
let titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red] groupSegment.setTitleTextAttributes(titleTextAttributes, for: .selected)
quelle
Swift 5- Erweiterung
extension UISegmentedControl { func setTitleColor(_ color: UIColor, state: UIControl.State = .normal) { var attributes = self.titleTextAttributes(for: state) ?? [:] attributes[.foregroundColor] = color self.setTitleTextAttributes(attributes, for: state) } func setTitleFont(_ font: UIFont, state: UIControl.State = .normal) { var attributes = self.titleTextAttributes(for: state) ?? [:] attributes[.font] = font self.setTitleTextAttributes(attributes, for: state) } }
quelle
In iOS 5.0 und höher können Sie die titleTextAttributes verwenden, um
UISegmentedControl
Objekte anzupassen :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];
Hier setze ich die Schriftart auf eine benutzerdefinierte Schriftart, Schriftgröße, Farbe für jeden Zustand der
UISegmentedControl
.Alle möglichen einfachen Anpassungen finden Sie im Abschnitt Anpassen des Erscheinungsbilds der UISegmentedControl-Klassenreferenz.
quelle
Ich benutze Monotouch. Ich weiß nicht warum, aber als die Ansicht verschoben wurde, hat sich die Textfarbe für mich nicht geändert. Um dies zu lösen, füge ich einfach Beschriftungen zur Segmentsteuerungsübersicht hinzu und ändere dann ihre Farben:
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; } }
und dann benutze es
segmented.SetColoredTittles(new string[] { "text1", "text2", "text3" }, UIColor.White,UIColor.DarkGray);
quelle