2012-05-25 9 views
7

.ios - UIButton codificado programáticamente que no se muestra en mi vista

Hola,

Estoy intentando añadir un UIButton y otros artículos a mi UIViewController programación y por lo que he leído y visto en otras preguntas, así que debería estar en el camino correcto con este código:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 



UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];  
backButton = [[UIButton alloc] init]; 
backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
backButton.frame = CGRectMake(10, 25, 150, 75); 
backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; 
backButton.titleLabel.text = @"Back"; 
[self.view addSubview:backButton]; 


// Do any additional setup after loading the view. 
} 

Ahora que el código se coloca en el método viewDidLoad y no aparece, lo que me lleva a la pregunta: ¿Qué estoy haciendo mal?

Cuando quiero cambiar el color del fondo y ponerlo en viewDidLoad funciona bien.

Saludos Jeff

+0

u puede enviar su código viewDidLoad – CStreel

+0

He actualizado el código para mostrar el método completo - Estoy practicando por lo está bastante vacío :-) –

+0

Como nota al margen, está creando tres instancias del botón. Dos son innecesarios. –

Respuesta

23

Creo que se le puede insertar el botón correctamente, pero simplemente no puede verlo porque no tiene fondo y el texto no aparece.

Pruebe usar un botón del botón rect , solo para ver si eso lo hace aparecer. Establecer el texto correctamente También eliminaré la configuración de la fuente, solo en caso de que haya un problema con la fuente.

// backButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
backButton = [UIButton buttonWithType:UIButtonTypeSystem]; 
backButton.frame = CGRectMake(10, 25, 150, 75); 
[backButton setTitle:@"Back" forState:UIControlStateNormal]; 
[self.view addSubview:backButton]; 

Actualización: UIButtonTypeRoundedRect ha BEED obsoleta.

+0

UIButtonTypeRoundedRect acordado proporcionó la información necesaria para permitir que se muestre el título. Sin embargo, dado que ahora está obsoleto, tendremos que usar UIButtonTypeCustom o System (si está relacionado con nav), como se menciona aquí: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIButton_Class/#// apple_ref/doc/c_ref/UIButtonType – bitsand

3

se está ajustando el título del botón de forma incorrecta. Uso:

- (void)setTitle:(NSString *)title forState:(UIControlState)state 

Además, como otros han dicho que no es necesario para inicializar el botón tres veces. Retire la 2da y 3ra líneas.

0

Aparte de los temas se ha señalado en los comentarios

UIButtonTypeCustom, crea un botón en blanco.

Utilice esto cuando desee utilizar una Imagen como un botón, pero tenga en cuenta el uso de setImage: anula el título del botón. Por lo tanto, deberá establecer una imagen de fondo.

Su botón está realmente allí simplemente no "parece" estar allí

Así

Uso UIButtonTypeRoundRect (que podría ser ligeramente diferente)

o si desea una imagen como una botón.

Uso UIButtonTypeCustom llamada setBackgroundImage: luego llamar setTitle:forState:

4

Ha creado el botón utilizando el método estático buttonWithType, Nuevamente ha asignado memoria para ese botón.

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
backButton.frame = CGRectMake(10, 25, 150, 75); 
backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; 
backButton.titleLabel.text = @"Back"; 
[self.view addSubview:backButton]; 
0

usted tiene que utilizar el tipo botón se RoundedRect entonces podemos ver el color de fondo

[UIButton buttonWithType: UIButtonTypeRoundedRect]; 

esperan que ayude!

1

Puede usar dispatch_after para llamar a un bloque más tarde. de modo que aquí, cuando se carguen las primeras vistas, tardarán 0.1 segundos y luego todos los botones estarán visibles a la vista. Xcode, comienza a escribir dispatch_after y pulsa Enter para autocompletar a lo siguiente:

Prueba esto:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 

    UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];  
    backButton = [[UIButton alloc] init]; 
    backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    backButton.frame = CGRectMake(10, 25, 150, 75); 
    backButton.titleLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:15]; 
    backButton.titleLabel.text = @"Back"; 
    [self.view addSubview:backButton]; 

}); 
+1

Hola @Nirav: gracias por el código, pero quizás agreguemos una explicación de cuál es su propósito en relación con la respuesta. Te hace más poplular :-) También pon todo tu código dentro del bloque de código. –

+1

Está mostrando cómo configurar un hilo que se llamará 0,1 segundos después de cargar la vista y en ese momento agregar el botón agregado mediante programación. Encontré esto mientras estaba en un código que no funcionaba cuando estaba a toda velocidad, pero que se ejecutaría si yo solo pisara el código. – netskink

Cuestiones relacionadas