2008-12-05 10 views
7

Me gustaría que una de las filas de mi tabla sea un botón que ocupe toda una fila de mi UITableView. Pensé que la mejor manera de hacerlo es crear una instancia de UIButton, y darle el mismo tamaño de marco que una instancia de UITableViewCell, y agregar eso como una subvista a la celda. Casi estoy allí, pero bastantes píxeles para no darle ese toque perfecto. ¿Hay un mejor enfoque para esto, o tal vez mi precisión de colocación se pueda arreglar para obtener esa alineación perfecta?UIButton para cubrir una UITableViewCell

cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier]; 
if(cell == nil) { 
    cell = [self tableviewCellWithReuseIdentifier:CellIdentifier]; 
} 
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button setFrame:CGRectMake(0.0f, 5.0f, 320.0f, 44.0f)]; 

[button setTitle:@"Do Stuff" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventTouchUpInside]; 
[cell addSubview:button]; 
+0

¿Puede dejar la etiqueta obsoleta "objectivec" fuera de sus preguntas en el futuro? Además, "cocoa" no es realmente apropiado para las preguntas de iPhone. ¡Gracias! –

Respuesta

13

Puede falsificarlo en su método didSelectRowAtIndexPath :. Haga que la celda tableView actúe como el botón.

[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:YES animated:YES]; 
[self doStuff]; 
[[[self tableView] cellForRowAtIndexPath:indexPath] setSelected:NO animated:YES]; 

Uso setSelected: animated: de falsificar una pulsación de botón y haga que se desvanecen. Podría hacer el truco para ti.

+1

Me gusta esta idea. Funciona muy bien con las vistas de tabla agrupadas. –

+0

Excepto que hay un pequeño retraso entre cuando presiona y cuando aparece el "flash" ... – zakdances

0

Esto puede estar al lado del punto, pero su código puede tener el problema donde se agrega otro botón a la celda cada vez que la celda se vuelve a utilizar.

0

Tuve el mismo problema que tú. Y Ryan le dio la respuesta: use la celda como un botón con el método didSelectedRowAtIndexPath :.

0

También puede agregar agregar un UIImage a su UITableViewCell para hacer que la celda parezca ser un botón.

0

También puede crear una vista con un botón y colocarla en el pie de página de la sección de arriba. De esta manera, no necesita preocuparse por la imagen de la celda en el fondo. Hice esto para colocar dos botones de medio ancho uno al lado del otro en una vista de tabla agrupada.

0

FWIW, puse el botón en mi aplicación en CGRectMake (9, 0, 302, 45) y creo que se ve perfecto.

3

La clase (UITableViewCell) tiene propiedad contentView. Así que puse el botón básico en contentView de la variable UITableViewCell.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ・・・ 
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    btn.frame = CGRectMake(230.0f, 4.0f, 60.0f, 36.0f); 
    [btn setTitle:@"OK" forState:UIControlStateNormal]; 
    [btn setTitle:@"OK" forState:UIControlStateSelected]; 
    [btn addTarget:self action:@selector(onClickRename:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:btn]; 
    ・・・ 
    return cell; 
} 

Lo siento, pobre mi inglés.

0
UIButton *btnView = [[UIButton alloc] init]; 
btnView.frame = CGRectMake(52.0f, 2.0f, 215.0f, 38.0f); 
[btnView setImage:[UIImage imageNamed:@"invite.png"] forState:UIControlStateNormal]; 
[btnView addTarget:self action:@selector(showInviteByMail) forControlEvents:UIControlEventTouchUpInside]; 
[cell.contentView addSubview:btnView]; 
[btnView release]; 
3

si desea que quepa perfectamente, simplemente llame a los límites de la celda como su CGRect. hazlo así:

button.frame = cell.bounds; 

Debería hacer que tu botón sea exactamente igual que tu celda. ¡Espero que ayude!

Cable

Cuestiones relacionadas