2012-01-12 15 views
5

Quiero agregar un botón en un UITableViewCell. Este es mi código: `Botón Agregar a UITableViewCell

if (indexPath.row==2) { 
    UIButton *scanQRCodeButton = [[UIButton alloc]init]; 

    scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f); 
    scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    scanQRCodeButton.backgroundColor = [UIColor redColor]; 
    [scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal]; 

    [cell addSubview:scanQRCodeButton]; 
}` 

Ahora, cuando corro la aplicación, sólo veo una fila en blanco! Algunas ideas ?

+0

Después de añadir '[cell.contentView addSubview: scanQRCodeButton];' también se puede soltar el botón '[liberación scanQRCodeButton];' – elprl

+0

* Si no está utilizando ARC – elprl

Respuesta

13

Si bien es natural ponerlo en la ContentView de la celda, estoy bastante seguro de que ese no es el problema (en realidad, en el pasado, nunca tuve las subvistas visualizadas correctamente en ContentView, así que siempre usé la celda).

De todos modos, el problema involucra las tres primeras líneas de cuando comienza a crear su botón. Las dos primeras líneas están muy bien, pero el código deja de trabajar con:

scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

buttonWithType: es en realidad un método de conveniencia de crear un botón (que es como un alloc-init compacto). Por lo tanto, en realidad "anula" sus últimas dos líneas (básicamente creó el botón dos veces). Solo puede usar init o buttonWithType: para el mismo botón, pero no para ambos.

UIButton *scanQRCodeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
scanQRCodeButton.frame = CGRectMake(0.0f, 5.0f, 320.0f, 44.0f); 
scanQRCodeButton.backgroundColor = [UIColor redColor]; 
[scanQRCodeButton setTitle:@"Hello" forState:UIControlStateNormal];  
[cell addSubview:scanQRCodeButton]; 

Esto funcionará (tenga en cuenta que puede usar cell.contentView si lo desea). En caso de que no esté utilizando el conteo automático de referencias (ARC), me gustaría mencionar que no tiene que hacer nada en términos de administración de memoria, porque buttonWithType: devuelve un botón de autorretractado.

+0

Sí. Ese fue el problema. Muchas gracias. – utsabiem

4

Desea agregar elementos de IU personalizados a la celda contentView.

Así, en lugar de hacerlo [cell addSubview:scanQRCodeButton];
[cell.contentView addSubview:scanQRCodeButton];

1

Trate de añadir [cell.contentView addSubview:scanQRCodeButton]; o si desea que el botón a la mirada lado izquierdo en my question en la respuesta, para mover el textLabel a un lado. Si desea el botón a la derecha, simplemente configúrelo como accesoryView, como este cell.accesoryView = scanQRCodeButton;.

+0

he añadido en contentView también, pero no funcionó . Creo que Kevin Low dio la solución. Déjame intentarlo. – utsabiem

7
UIButton *deletebtn=[[UIButton alloc]init]; 
      deletebtn.frame=CGRectMake(50, 10, 20, 20); 
      deletebtn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
      [deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal]; 
      [deletebtn addTarget:self action:@selector(DeleteRow:) forControlEvents:UIControlEventTouchUpInside]; 
      [cell.contentView addSubview:deletebtn]; 

o

// clase Descargar e importación en su proyecto UIButton+EventBlocks

UIButton *deletebtn=[UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[deletebtn setFrame:CGRectMake(170,5, 25, 25)]; 
deletebtn.tag=indexPath.row; 
[deletebtn setImage:[UIImage imageNamed:@"log_delete_touch.png"] forState:UIControlStateNormal]; 
[deletebtn setOnTouchUpInside:^(id sender, UIEvent *event) { 


    //Your action here 
}]; 
[cell addSubview:deletebtn]; 
0

Método setTitle no funciona en mi código, por lo que he establecido mediante el uso de

[UIButton.titleLabel setText:@""] 

en lugar de usar el método setTitle.

Inténtelo de nuevo con el código siguiente:

[scanQRCodeButton.titleLabel setText:@"Hello"]; 

entonces sería trabajar bien.

Cuestiones relacionadas