2010-09-10 9 views

risposta

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

È possibile ottenere la cella utilizzando [self.tableView cellForRowAtIndexPath:] e poi accedere alla sua proprietà textLabel.text, ma di solito c'è un modo migliore.

In genere è stata compilata la tabella in base ad alcuni array di modelli a cui UITableViewController ha accesso. Quindi un modo migliore per gestirlo nella maggior parte dei casi è prendere il numero di riga della cella selezionata e usarlo per trovare i dati associati nel modello.

Per esempio, diciamo che il controller ha una serie di Buddy oggetti, che dispongono di una proprietà name:

NSArray *buddies; 

Si popolano questo array eseguendo una query o qualcosa del genere. Poi, nel tableView:cellForRowAtIndexPath: si costruisce una cella di vista della tabella in base al nome di ciascun compagno:

- (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; 
} 

Ora, quando l'utente seleziona una riga, basta tirare l'oggetto corrispondente compagno fuori del vostro array e fare qualcosa con esso.

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

che era quello che stavo cercando di fare, ma io non pensavo che la cosa fo NSArray. – lab12

+0

Fresco. Potrei dire in base alla tua domanda che questo probabilmente sarebbe un modo più pulito per ottenere ciò che stavi cercando di fare. – 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

Se qualcuno si imbatte in questo e si chiede come fare questo in rapida del codice è qui sotto. Ricordarsi inoltre di utilizzare il binding opzionale per scartare quello opzionale ed evitare anche di stampare "Opzionale (" Etichetta elemento maschiato ")".

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

Ecco quello che ho usato, molto semplice

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) 



    } 
} 
Problemi correlati