tutorial example efecto create cellforrowat apple ios uitableview autolayout layoutsubviews

ios - example - uitableview tutorial



UITableView: ¿Cómo cambiar la altura de la celda de forma dinámica cuando se hace clic en un botón? (2)

Llame a la función - reloadRowsAtIndexPaths:withRowAnimation: Implementar la función UITableViewDelegate function - tableView:heightForRowAtIndexPath: y devolver la nueva altura.

Tengo una UITableView, en la que cada celda tiene un botón.
Cuando se hace clic en el botón, se cambiará la altura de la celda.
Por supuesto, toda la altura de la tabla se cambiará de acuerdo con ella.
No puedo encontrar una forma durante la navegación larga. ¿Cuál es una solución elegante para lograr esto?


(Vea esta respuesta. Felicitaciones a Tapas Pal por escribir la respuesta original. Simplemente la cambié para que se ajuste mejor a su pregunta).

Necesitará una variable BOOL para decirle a la célula que su altura debe ser diferente de las otras. También necesitará una variable numérica (aquí, NSInteger ) para que pueda aumentar la altura de la celda correcta.

BOOL shouldCellBeExpanded = NO; NSInteger indexOfExpandedCell = -1;

Luego, en su -tableView:cellForRowAtIndexPath: agregue lo siguiente al lugar donde diseña su celda. Establecerá que la etiqueta del botón sea la misma que la fila de su celda para que sepa qué celda expandir. Además, si necesita agregar elementos a la celda, puede hacerlo dentro de la instrucción if .

[[cell aButton] setTag:[indexPath row]]; if(shouldCellBeExpanded && [indexPath row] == indexOfExpandedCell) { // design your read more label here }

Pasando al botón IBAction . Cuando se UITableView el botón, UITableView volverá a cargar la celda en la que se encuentra el botón. Nota: si usa varias secciones en su UITableView , necesitará agregar otra variable numérica para dar cuenta de eso. Comente si necesita ayuda.

-(IBAction) aButtonTapped:(id)sender { UIButton *aButton = (UIButton *)sender; indexOfExpandedCell = [aButton tag]; shouldCellBeExpanded = YES; [[self tableView] beginUpdates]; [[self tableView] reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForItem: indexOfExpandedCell inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic]; [[self tableView] endUpdates]; }

Finalmente, en el -tableView:heightForRowAtIndexPath: :

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { if(shouldCellBeExpanded && [indexPath row] == indexOfExpandedCell) return 200.0f; //Your desired height for the expanded cell else return 100.0f; //The other cells'' height }

Lo que hace es verificar si se espera expandir una celda y, de ser así, si esa celda es la que actualmente se solicita un valor de altura. Si lo es, entonces el valor devuelto es la altura expandida. Si no, el original.