selectedsegmentindex segmented how example control change swift uisegmentedcontrol

how - swift segmented control change view



cómo cambiar el tamaño de la fuente y el nombre de la fuente de uisegmentedcontrol programmatically en swift? (9)

¿Cómo cambiar el tamaño de la fuente y el nombre de la fuente de uisegmentedcontrol mediante programación? Utilicé rápido.

Aquí está mi código:

self.mysegmentedControl = UISegmentedControl(items: [ NSLocalizedString("Aaaaaa", comment: ""), NSLocalizedString("Bbbbbb", comment: ""), NSLocalizedString("Cccccc", comment: ""), NSLocalizedString("Dddddd", comment: ""), NSLocalizedString("Eeeeee", comment: ""), ]) self.mysegmentedControl.addTarget(self, action: "mysegmentedControlDidChange:", forControlEvents: .ValueChanged) self.mysegmentedControl.selectedSegmentIndex = 0

Saludos.


A modo de extender el excelente enfoque Swift de mvien. Creé una extensión SegmentedControl:

extension UISegmentedControl { func setFontSize(fontSize: CGFloat) { let normalTextAttributes: [NSObject : AnyObject] = [ NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont.systemFontOfSize(fontSize, weight: UIFontWeightRegular) ] let boldTextAttributes: [NSObject : AnyObject] = [ NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName : UIFont.systemFontOfSize(fontSize, weight: UIFontWeightMedium), ] self.setTitleTextAttributes(normalTextAttributes, forState: .Normal) self.setTitleTextAttributes(normalTextAttributes, forState: .Highlighted) self.setTitleTextAttributes(boldTextAttributes, forState: .Selected) } }

Simplemente agregue el código de extensión anterior a su proyecto y luego use esto:

yourSegmentedControl.setFontSize(20)


Esta respuesta está fechada, pero para aquellos que buscan una solución rápida, es posible que desee probar este enfoque:

func stylizeFonts(){ let normalFont = UIFont(name: "Helvetica", size: 16.0) let boldFont = UIFont(name: "Helvetica-Bold", size: 16.0) let normalTextAttributes: [NSObject : AnyObject] = [ NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: normalFont! ] let boldTextAttributes: [NSObject : AnyObject] = [ NSForegroundColorAttributeName : UIColor.whiteColor(), NSFontAttributeName : boldFont!, ] self.setTitleTextAttributes(normalTextAttributes, forState: .Normal) self.setTitleTextAttributes(normalTextAttributes, forState: .Highlighted) self.setTitleTextAttributes(boldTextAttributes, forState: .Selected) }

Asegúrese de agregar stylizeFonts () en su viewDidLoad o como una función separada si está creando subclases.


La interfaz de usuario puede usar la apariencia de control, el mejor lugar para agregar que está en el delegado de la aplicación, el método didFinishLaunchingWithOptions , didFinishLaunchingWithOptions si desea configurar el mismo atributo para cada UISegmentedControls en su proyecto solo una vez:

let attr = NSDictionary(object: UIFont(name: "HelveticaNeue-Bold", size: 16.0)!, forKey: NSFontAttributeName) UISegmentedControl.appearance().setTitleTextAttributes(attr as [NSObject : AnyObject] , forState: .Normal)

Pero si va a configurar atributos para un solo UISegmentedControl o si desea cambiarlo más a menudo basándose en alguna condición, use este método, UISegmentedControl:

func setTitleTextAttributes(_ attributes: [NSObject : AnyObject]?, forState state: UIControlState)

Ejemplo:

let attr = NSDictionary(object: UIFont(name: "HelveticaNeue-Bold", size: 16.0)!, forKey: NSFontAttributeName) seg.setTitleTextAttributes(attr as [NSObject : AnyObject] , forState: .Normal)


La respuesta de Greg actualizada para Swift3:

let attr = NSDictionary(object: UIFont(name: "OpenSans", size: 12.0)!, forKey: NSFontAttributeName as NSCopying) UISegmentedControl.appearance().setTitleTextAttributes(attr as [NSObject : AnyObject] , for: .normal)


Para Swift 4

let font: [AnyHashable : Any] = [NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17)] segmentedControl.setTitleTextAttributes(font, for: .normal)


Para veloz 3

UISegmentedControl.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.white], for: .selected)


Usando la respuesta de @Alvin George porque creo que es una gran idea agregar una extensión para manipular eso (y mejorarlo para Swift 4):

Cree una clase de extensión de UISegmentedControl como UISegmentedControl+Additions.swift

import Foundation import UIKit extension UISegmentedControl { func font(name:String?, size:CGFloat?) { let attributedSegmentFont = NSDictionary(object: UIFont(name: name!, size: size!)!, forKey: NSAttributedStringKey.font as NSCopying) setTitleTextAttributes(attributedSegmentFont as [NSObject : AnyObject], for: .normal) } }

Úselo en su código:

segmentedControl?.font(name: "My Font Name", size: 12)


Swift 2.0

override func viewDidLayoutSubviews() { let attributedSegmentFont = NSDictionary(object: UIFont(name: "Roboto-Regular", size: 14.0)!, forKey: NSFontAttributeName) dashBoardSegment.setTitleTextAttributes(attributedSegmentFont as [NSObject : AnyObject], forState: .Normal) }

Cambiando para todos los controles de segmento, use:

UISegmentedControl.appearance().setTitleTextAttributes(attributedSegmentFont as [NSObject : AnyObject], forState: .Normal)

Usando Swift Extension:

extension UISegmentedControl{ func changeTitleFont(newFontName:String?, newFontSize:CGFloat?){ let attributedSegmentFont = NSDictionary(object: UIFont(name: newFontName!, size: newFontSize!)!, forKey: NSFontAttributeName) setTitleTextAttributes(attributedSegmentFont as [NSObject : AnyObject], forState: .Normal) } }

Implementando la extensión:

override func viewDidLayoutSubviews() { dashBoardSegment.changeTitleFont("Roboto-Regular", newFontSize: 14.0) }


Swift3

override func viewDidLayoutSubviews() { let attr = NSDictionary(object: UIFont(name: "Chalkduster", size: 14.0)!, forKey: NSFontAttributeName as NSCopying) segmentedControl.setTitleTextAttributes(attr as [NSObject : AnyObject] , for: .normal) }