2011-12-21 10 views
8

Por lo tanto, estoy tratando de cambiar el UILabel en un UIButton a una instancia de FXLabel en su lugar. Consulte el enlace para obtener más información sobre FXLabel (https://github.com/nicklockwood/FXLabel). Sé usando extensiones de clase (Subclass UIButton to add a property), siempre podría agregar otra propiedad, en mi caso, un FXLabel simplemente agregando una subvista básicamente. Sin embargo, me gusta la comodidad y las características de la propiedad titleLabel ya presente.¿Puedo * reemplazar * el UILabel en un UIButton con FXLabel?

¿Hay algún método para "cambiar" el UILabel por un FXLabel por subclase o categoría?

Sé que podría hacer esto, pero es un hack y no es a prueba de futuro. Y no sé cómo cambiar el tipo de clase (Get UILabel out of UIButton).

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

Thoughts ?? Gracias.

Respuesta

5

Aquí hay otra manera en la que al menos podría acceder a la etiqueta. Cree una subclase de UIButton, y en esa subclase anule layoutSubviews. Desde allí se puede acceder directamente a la etiqueta:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

Ahora que todavía está atascado con el problema de cambiar esa etiqueta a ser una subclase. Supongo que podrías tratar de cambiar dinámicamente la clase UILabel con tu subclase FXLabel (como se detalla en here), pero para ser honesto, es bastante arriesgado.

Yo diría que es mejor que solo crees tu propio UIControl que puedes personalizar a tu gusto. Sin riesgo, solo bondad pura. No debería ser demasiado difícil imitar un simple UIButton. ¡Buena suerte!

+0

Gracias por el consejo. Creo que solo intentaré crear mi propia clase personalizada. Voy a marcar esto como respondiendo mi pregunta si nadie más me da algo mejor. ¡Gracias! –

+1

Acabo de hackearlo y agregué la etiqueta en la parte superior del botón sin configurar el texto en el botón. Ahora tengo que hacer un seguimiento de dos propiedades para cambios alfa, etc., pero es mucho más fácil que tratar de crear mi propio UIControl. Voy a trabajar en ello en el futuro y ver si consigo algo –

1

Lamento decirlo pero no creo que pueda hacerlo de manera confiable. Incluso si subclasificó UIButton y anuló los métodos titleLabel, también tendría que manejar la configuración de estado. Y nunca se sabe cuando el código interno se refiere directamente a un ivar privado para la etiqueta.

Creé una subclase de UIButton para mis aplicaciones para hacer algo similar (diseños de botones personalizados & subvistas), lo siento, no puedo compartirlo ahora, es propiedad de un cliente. No es demasiado difícil crear su propio código de manejo de estado para sus propias subvistas.

+0

Gracias por la ayuda. Veré lo que puedo armar. –

Cuestiones relacionadas