2011-12-06 15 views
25

Tengo una vista de tabla con algunos elementos (todo el texto). Cuando el usuario hace clic en la fila, quiero que ese texto en esa celda se agregue a una matriz.UITableView DidSelectRowAtIndexPath?

¿Cómo tomo el texto de la celda?

ya he:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

} 

¿Hay una línea sencilla que puedo utilizar para agarrar el texto fuera de la célula que el usuario hace clic?

Respuesta

94

Uso UITableView's cellForRowAtIndexPath:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *cellText = cell.textLabel.text; 
} 
+0

+1 para la gran respuesta – Rushabh

+0

¡Funciona como un encanto todavía en iOS7! –

+0

No. Muchos ejemplos siempre dequeue y construyen una nueva celda en cellForRowAtIndexPath. Entonces, si lo llama, no obtendrá la misma celda que se devolvió cuando el marco lo llamó para mostrar las celdas. – user2451227

3

Mi primera conjetura sería conseguir el índice, [fila indexPath]; luego, obtiene los datos de su fuente de datos (una matriz o datos centrales) en lugar de obtenerlos directamente de la tabla.

6

Es lo contrario de lo que hizo en cellForRowAtIndexPath.

[myArray addObject: [datasource objectAtIndex:indexPath.row]]; 
4

En general, puede encontrar la mayoría de las respuestas a preguntas como esta en la documentación de Apple. Para este caso, busque en UITableView Class Reference y verá un encabezado de sección: Acceso a celdas y secciones. Esto le da el siguiente método:.

– cellForRowAtIndexPath: 

Ahora utiliza para acceder a la celda y, a continuación, utilizar obtener el texto de la celda (si no está seguro de cómo, busque en la UITableViewCell Class Reference

Todos juntos , el método podría ser algo como esto:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *cellText = cell.textLabel.text; 
    [myArray addObject:cellText]; 
} 
1

Swift Versión:

let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 
let cellText: String = cell.textLabel.text 
Cuestiones relacionadas