2009-10-11 19 views
5

Tengo una aplicación de conjugación de verbos que muestra traducciones de verbos en la primera celda de una tabla. En la actualidad, la lista de traducción es solo una cadena (lista separada por comas), pero me gustaría cambiarla para que tenga botones en los que se pueda hacer clic. Me divertí agregando botones a la vista de celda sin demasiado éxito, pero mi única experiencia con células personalizadas ha sido el uso de posicionamiento específico, por lo que no estoy seguro de cómo lograr una lista dinámica de botones (anchuras variables) dentro de una celda.Agregar botones dinámicamente a uitableviewcell - Aplicación para iPhone

Cualquier ayuda muy apreciada.

Saludos.

Respuesta

3

Haga un objeto UIView. Establezca sus objetos UIButton como subvistas de esta vista principal.

Una vez que tenga eso, puede agregar esta vista principal a la propiedad contentView de la celda.

En el método de delegado -tableView:cellForRowAtIndexPath:, generaría la vista primaria (y el número y tipo de botones dentro) en función de un estado condicional, antes de agregarla a la celda contentView.

En cuanto a hacer esto programáticamente, tan pronto como alguna condición cambie, ejecute [tableView reloadData] o métodos similares para actualizar la vista de tabla y sus celdas.

4

Do siguiente

-(CGRect)placeAButton:(NSString*)textFromField withCell:(UITableViewCell*)cell 
{ 
    CGSize  theSize; 
    CGSize  constraintSize; 

    // Create a button and add as subview to cell 
    // Get coordinates to place the button 

    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 

    button.titleLabel.font    = [UIFont systemFontOfSize:MEDIUM_FONT_SIZE];; 
    button.titleLabel.lineBreakMode  = UILineBreakModeTailTruncation; 
    button.contentVerticalAlignment  = UIControlContentVerticalAlignmentCenter; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter; 

    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button setTitle:textFromField forState:UIControlStateNormal]; 

    UIImage *buttonBkground; 
    buttonBkground = [UIImage imageNamed:@"blueButton.png"]; 
    UIImage *newImage = [buttonBkground stretchableImageWithLeftCapWidth:12.0 topCapHeight:0.0]; 
    [button setBackgroundImage:newImage forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:button]; 

[self.tableView reloadData] 
} 

Vas a tener que cuidar de ancho de las celdas, altura, etc., mientras que la creación de botones de forma dinámica.

+0

hola, gracias por sus respuestas. Tuve una grieta en esto, pero no estaba apareciendo nada. Tendré otra oportunidad cuando tenga la oportunidad, lamento no haber podido responder antes (o dedicar el tiempo suficiente para resolver los problemas que aún estoy recibiendo). Trataré de hacerlo lo antes posible. – alan

4

Acabo de hacer esto para mi nueva aplicación para iPad, así que pensé en pegar el código.

// NOTE - This is within a loop  
// Add the translation as a button 
    UIButton *translationButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    translationButton.backgroundColor = [UIColor clearColor]; 
    translationButton.titleLabel.font = [UIFont boldSystemFontOfSize:16]; 
    [translationButton setTitle:translation forState:UIControlStateNormal]; 
    [translationButton addTarget:self action:@selector(translationSearch:) forControlEvents:UIControlEventTouchUpInside]; 
    // Work out required size 
    fontSize = [translationButton.titleLabel.text sizeWithFont:translationButton.titleLabel.font];  
    CGRect buttonFrame = CGRectMake(xOffset, 15, fontSize.width + 20.0, 24); 
    [translationButton setFrame:buttonFrame]; 

    // Now set the new x Offset 
    xOffset = buttonFrame.origin.x + buttonFrame.size.width + 6.0; 

    [verbView addSubview:translationButton];  

Cheers.

+0

qué se puede hacer si no tenemos el título del botón para diferenciar los botones y no tienen ningún texto. En mi caso, solo estoy usando las imágenes en lugar del título del botón. ¿Qué se puede hacer en un caso así? –

+0

Si está utilizando imágenes, supongo que conoce el tamaño de las mismas. En este caso, simplemente puede colocarlos a intervalos regulares. El código anterior usa fontSize.width para calcular el desplazamiento. Simplemente debería poder usar el ancho de su imagen. – alan

0

Usted puede hacer esto dentro de la función viewcontroller cellForRowAtIndexPath:

var btn = UIButton(frame: CGRectMake(100, 100, 100, 20)); 
    btn.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal); 
    btn.setTitle("My Button", forState:UIControlState.Normal); 
    btn.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside); 

    //add the buttons to the cell 
    cell.contentView.addSubview(btn) 

Añadir otra función en la misma clase que recibirá el evento aprovechado botón

func buttonTapped(sender: UIButton!) 
{ 
    println("Button Tapped") 
} 
+0

Cuando mueve su celda hacia arriba o hacia abajo, el botón de arriba vuelve a crearse. –

+0

Crea el botón fuera de la función y agrégalo a la celda después de verificar si el botón existe. Si hay muchas celdas, mantenga un mapa o índice de botones. – srinivas

Cuestiones relacionadas