2011-02-05 25 views
27

Quiero hacer un UIButton con tipo UIButtonTypeCustom (para la forma). Quiero asignar el título usando button.titleLabel porque necesito especificar la fuente. El siguiente código parece que debería funcionar, pero no lo hace, no aparece ninguna etiqueta, punto.iOS: UIButton titleLabel: ¿hace algo?

UIImage *editButtonImage = [UIImage imageNamed: @"editButton.png"]; 
float width = editButtonImage.size.width; 
float height = editButtonImage.size.height; 

UIButton *editButton = [UIButton buttonWithType: UIButtonTypeCustom]; 
editButton.frame = CGRectMake(0, 0, width, height); 
[editButton setBackgroundImage: editButtonImage forState: UIControlStateNormal]; 
editButton.adjustsImageWhenHighlighted = YES; 
editButton.titleLabel.text = @"Edit"; 
editButton.titleLabel.textColor = [UIColor whiteColor]; 
editButton.titleLabel.textAlignment = UITextAlignmentCenter; 
editButton.titleLabel.font = [UIFont fontWithName: @"Helvetica" size: 14]; 
[self.view addSubview: editButton]; 

Todo el mundo siempre dice que el uso setTitle: forState: pero que le da un tipo de letra que no me gusta. El método titleLabel NO está en desuso, debería funcionar.

Me he topado con esto varias veces antes y siempre lo he solucionado, pero me gustaría averiguarlo. ¿Algunas ideas?

Respuesta

79

Establecer la propiedad de titleLabeltext no tiene ningún efecto. En su lugar, llame -setTitle:forState: en el botón:

[editButton setTitle:@"Edit" forState:UIControlStateNormal] 

La razón de esto es debido a que el botón puede tener diferentes títulos para los diferentes estados (por ejemplo, UIControlStateDisabled, UIControlStateHighlighted). Establecer una propiedad para el estado de control UIControlStateNormal se aplicará a todos los estados si no especifica los otros explícitamente.

por la documentación de UIButton:

Esta clase proporciona métodos para establecer el título, la imagen y otras propiedades de apariencia de un botón. Al usar estos accesos, puede especificar una apariencia diferente para cada estado de botón.

Puede personalizar el color de la etiqueta y el color de la sombra en función del estado. Ver -setTitleColor:forState y -setTitleShadowColor:forState, respectivamente. El resto de las propiedades en titleLabel, como textAlignment y font, debe funcionar como las tiene configuradas ahora y debe aplicarse a todos los estados de control.

En concreto, consulte la documentación de UIButton 's titleLabel propiedad: https://developer.apple.com/documentation/uikit/uibutton/1623992-titlelabel

titleLabel en sí es de sólo lectura, pero eso no quiere decir que no puede cambiar los valores de sus propiedades, como la fuente, modo de salto de línea, etc.

+1

Por lo tanto, lo único que no se puede establecer con titleLabel es el valor de texto real. Eso me parece un poco extraño, pero está bien. – Amagrammer

+4

Es un poco contradictorio al principio. Aparentemente, establecer la propiedad 'text' de la etiqueta sería simplemente un atajo para llamar a' -setTitle: forState', pero no es así. – LucasTizma

+2

De manera similar, parece que no puede establecer directamente la propiedad textColor de titleLabel, pero tiene que usar el método setTitleColor: forState :. Gracias por mencionar esto, porque no está en la documentación. – arlomedia

Cuestiones relacionadas