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