segmented how example control iphone objective-c cocoa-touch uisegmentedcontrol

iphone - how - swift 4 segmented control example



Cómo cambiar el color de la fuente de UISegmentedControl (10)

A continuación se muestra el código para configurar la fuente en negrita y tamaño de punto:

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

Espero que ayude

Intento cambiar el color de fuente de blanco a negro para UISegmentedControl (para iOS 4. *)

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];

Pero el color del texto no cambia. ¿Qué debería hacer para cambiar el color del texto para UISegmentedControl ?


Actualizado para Swift 4 - Use esta extensión (porque la extensión siempre es increíble ... !!)

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) } }

y de la clase respectiva, puedes usar estas funciones,

@IBOutlet weak var segment: UISegmentedControl! segment.defaultConfiguration() // or provide paramater as per your requirement segment.selectedConfiguration(color: .blue)


Código Swift 4 para establecer el color de fuente de ambos estados en negro

let titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black] segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .normal) segmentedControl.setTitleTextAttributes(titleTextAttributes, for: .selected)


En iOS 5.0 y posterior, puede usar titleTextAttributes para personalizar los objetos 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];

Aquí establezco la fuente en una fuente personalizada, tamaño de fuente, color para cada estado del UISegmentedControl .

Encontrará todas las personalizaciones simples posibles en la sección Apariencia de personalización de la Referencia de clase UISegmentedControl.


En iOS 6.0 y superior, es muy simple:

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];


Estoy usando monotouch. No sé por qué, pero cuando View fue insertado, el color del texto no cambió para mí. para resolver esto, solo agregue etiquetas a la supervista de control de segmento y luego cambie sus colores:

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; } }

y luego usarlo

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


Por si acaso, para ayudar a alguien más que llegue y esté trabajando con rapidez.

Pondré las dos formas posibles de hacerlo. Puede cambiar los atributos de texto en UIAppearance o directamente en el segmento en el que está trabajando.

El primer ejemplo establece los atributos en la apariencia, de esta manera personalizará todos los controles segmentados en su aplicación:

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)

El segundo ejemplo, directamente en el segmentado, personalizará solo este segmentado:

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)


Si necesita cambiar el color del texto del segmento resaltado en iOS 7, aquí hay una solución (tardé un poco en encontrarla, pero gracias a esta publicación ):

C objetivo

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

Rápido

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


veloz 3.2:

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

Nota: si usa un color de fondo personalizado, verá un error en las esquinas (el color llenará los segmentos externos), entonces use esta línea para recortarlo:

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


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

para iOS 3.0 y superior