2010-09-10 21 views

Respuesta

48
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    // now you can use cell.textLabel.text 
} 
3

Usted puede obtener la célula utilizando [self.tableView cellForRowAtIndexPath:] y luego acceder a su propiedad textLabel.text, pero por lo general hay una mejor manera.

Normalmente ha rellenado su tabla en función de alguna matriz de modelos a la que tenga acceso su UITableViewController. Entonces, una mejor forma de manejar esto en la mayoría de los casos es tomar el número de fila de la celda que se seleccionó y usar eso para encontrar los datos asociados en su modelo.

Por ejemplo, digamos que su controlador tiene una gran variedad de objetos Buddy, que tienen una propiedad name:

NSArray *buddies; 

Rellena esta matriz mediante la ejecución de una consulta o algo así. Luego, en tableView:cellForRowAtIndexPath: se construye una celda de visualización de mesa basado en el nombre de cada compañero:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BuddyCell"]; 
    if (!cell) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"BuddyCell"] autorelease]; 
    } 
    cell.textLabel.text = [buddies objectAtIndex:indexPath.row]; 
    return cell; 
} 

Ahora, cuando el usuario selecciona una fila, que acaba de tirar el objeto de Buddy correspondiente de su matriz y hacer algo con él.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    Buddy *myBuddy = [buddies objectAtIndex:indexPath.row]; 
    NSLog (@"Buddy selected: %@", myBuddy.name); 
} 
+0

que era lo que estaba tratando de hacer, pero yo no creía que la cosa fo NSArray. – lab12

+0

Genial. De acuerdo con su pregunta, podría decir que esta sería probablemente una forma más limpia de lograr lo que estaba tratando de hacer. – cduhn

1
if (selected) 
{ 
    indicator.image = [UIImage imageNamed:@"IsSelected.png"]; 
    [arrSlectedItem addObject:strselecteditem]; 
    NSLog(@"-- added name is %@", strselecteditem); 

} 
else 
{ 
    indicator.image = [UIImage imageNamed:@"NotSelected.png"]; 
    [arrSlectedItem removeObject:strselecteditem]; 
    NSLog(@"--- remove element is -- %@", strselecteditem); 
} 
0

Si alguien tropieza con esto y se pregunta cómo hacer esto en el código rápida está por debajo. También recuerde usar un encuadernado opcional para desenvolver ese opcional y también evitar imprimir "Opcional (" Etiqueta de elemento golpeado ")".

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let cell = tableView.cellForRowAtIndexPath(indexPath) 

     // Unwrap that optional 
     if let label = cell?.textLabel?.text { 
      println("Tapped \(label)") 
     } 
    } 
0

aquí lo que solía; muy simple

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath){ 

    if editingStyle == UITableViewCellEditingStyle.Delete 
    { 

     //create cellobj with indexpath for get it text 
     let cell = tableView.cellForRowAtIndexPath(indexPath) 
     let celltext = (cell?.textLabel?.text!)! as String 
     //do what ever you want with value 
     print((cell?.textLabel?.text!)! as String) 



    } 
} 
Cuestiones relacionadas