titlelabel settitle color buttons ios swift uibutton

ios - settitle - swift button action



Swift-UIButton con dos lĂ­neas de texto (8)

Me preguntaba si es posible crear un UIButton con dos líneas de texto. Necesito que cada línea tenga un tamaño de fuente diferente. La primera línea será de 17 puntos y la segunda será de 11 puntos. He intentado jugar con dos etiquetas dentro de un UIButton, pero no consigo que se queden dentro de los límites del botón.

Estoy tratando de hacer todo esto en el generador de interfaz de usuario, y no mediante programación.

Gracias


Estaba buscando casi el mismo tema, excepto que no necesito dos tamaños de fuente diferentes. En caso de que alguien esté buscando una solución simple:

let str = NSMutableAttributedString(string: "First line/nSecond Line") str.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 17), range: NSMakeRange(0, 10)) str.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: 12), range: NSMakeRange(11, 11)) button.setAttributedTitle(str, for: .normal)


Hay dos preguntas

Me preguntaba si es posible crear un UIButton con dos líneas de texto

Esto es posible mediante el uso del guión gráfico o mediante programación.

Storyboard:

Cambie el ''Modo de salto de línea'' a Ajuste de caracteres o Ajuste de palabras y use Alt / Opción + tecla Intro para ingresar una nueva línea en el campo Título de UIButton.

Programáticamente:

override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) btnTwoLine?.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping; }

Necesito que cada línea tenga un tamaño de fuente diferente 1

El peor de los casos es que puede usar una clase UIButton personalizada y agregar dos etiquetas dentro de ella.

La mejor manera es utilizar NSMutableAttributedString . Tenga en cuenta que esto solo se puede lograr mediante programación.

Swift 5:

@IBOutlet weak var btnTwoLine: UIButton? override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) //applying the line break mode btnTwoLine?.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping; var buttonText: NSString = "hello/nthere" //getting the range to separate the button title strings var newlineRange: NSRange = buttonText.rangeOfString("/n") //getting both substrings var substring1: NSString = "" var substring2: NSString = "" if(newlineRange.location != NSNotFound) { substring1 = buttonText.substringToIndex(newlineRange.location) substring2 = buttonText.substringFromIndex(newlineRange.location) } //assigning diffrent fonts to both substrings let font:UIFont? = UIFont(name: "Arial", size: 17.0) let attrString = NSMutableAttributedString( string: substring1 as String, attributes: NSDictionary( object: font!, forKey: NSFontAttributeName) as [NSObject : AnyObject]) let font1:UIFont? = UIFont(name: "Arial", size: 11.0) let attrString1 = NSMutableAttributedString( string: substring2 as String, attributes: NSDictionary( object: font1!, forKey: NSFontAttributeName) as [NSObject : AnyObject]) //appending both attributed strings attrString.appendAttributedString(attrString1) //assigning the resultant attributed strings to the button btnTwoLine?.setAttributedTitle(attrString, forState: UIControlState.Normal) }

Swift mayor

let button = UIButton() button.titleLabel?.numberOfLines = 0 button.titleLabel?.lineBreakMode = .byWordWrapping button.setTitle("Foo/nBar", for: .normal) button.titleLabel?.textAlignment = .center button.sizeToFit() button.addTarget(self, action: #selector(rightBarButtonTapped), for: .allEvents) navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)

Salida


He notado un problema en la mayoría de las soluciones que es al hacer el modo de salto de línea a "Ajuste de caracteres" la segunda línea quedará alineada con la primera línea

Para hacer todas las líneas centradas. simplemente cambie el título De simple a Atribuido y luego puede hacer que cada línea se centre


He solucionado esto y mi solución fue solo en el Storyboard.

Cambios:

Se agregó en el Inspector de identidad -> Atributos de tiempo de ejecución definidos por el usuario (estos KeyPaths):

  • numberOfLines = 2
  • titleLabel.textAlignment = 1

Atributos de tiempo de ejecución definidos por el usuario

Agregué esto en el inspector de atributos:

  • salto de línea = ajuste de línea

Ajuste de línea


Necesita hacer algo de esto en código. no puede configurar 2 fuentes diferentes en IB. Además de cambiar el modo de salto de línea a ajuste de caracteres, necesita algo como esto para establecer el título,

let firstLabel = UILabel() firstLabel.backgroundColor = UIColor.lightGrayColor() firstLabel.text = "Hi" firstLabel.textColor = UIColor.blueColor() firstLabel.textAlignment = NSTextAlignment.Center firstLabel.frame = CGRectMake(0, testButton.frame.height * 0.25, testButton.frame.width, testButton.frame.height * 0.2) testButton.addSubview(firstLabel) let secondLabel = UILabel() secondLabel.backgroundColor = UIColor.lightGrayColor() secondLabel.textColor = UIColor.blueColor() secondLabel.font = UIFont(name: "Arial", size: 12) secondLabel.text = "There" secondLabel.textAlignment = NSTextAlignment.Center secondLabel.frame = CGRectMake(0, testButton.frame.height * 0.5, testButton.frame.width, testButton.frame.height * 0.2) testButton.addSubview(secondLabel)


Una forma de hacerlo es con etiquetas, supongo. Hice esto, y parece funcionar bien. Podría crear esto como un UIButton y luego exponer las etiquetas, supongo. No sé si esto tiene sentido.

let firstLabel = UILabel() firstLabel.backgroundColor = UIColor.lightGrayColor() firstLabel.text = "Hi" firstLabel.textColor = UIColor.blueColor() firstLabel.textAlignment = NSTextAlignment.Center firstLabel.frame = CGRectMake(0, testButton.frame.height * 0.25, testButton.frame.width, testButton.frame.height * 0.2) testButton.addSubview(firstLabel) let secondLabel = UILabel() secondLabel.backgroundColor = UIColor.lightGrayColor() secondLabel.textColor = UIColor.blueColor() secondLabel.font = UIFont(name: "Arial", size: 12) secondLabel.text = "There" secondLabel.textAlignment = NSTextAlignment.Center secondLabel.frame = CGRectMake(0, testButton.frame.height * 0.5, testButton.frame.width, testButton.frame.height * 0.2) testButton.addSubview(secondLabel)


cambie el salto de línea al ajuste de caracteres, seleccione su botón y en el inspector de atributos vaya al salto de línea y cámbielo a ajuste de caracteres


Sintaxis de SWIFT 3

override func viewDidLoad() { super.viewDidLoad() var str = NSMutableAttributedString(string: "First line/nSecond Line") str.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(17), range: NSMakeRange(0, 10)) str.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(12), range: NSMakeRange(11, 11)) button.setAttributedTitle(str, forState: .Normal) }