2010-07-08 7 views
6

Ho TableCellViewController per la gestione delle celle nel mio UITableView. Ogni cella ha un'etichetta su UISwitch (dictTypeSwitch). A voglio assegnare il metodo per passare gli eventi in modo da poter salvare lo stato del pulsante.Aggiungi azione personalizzata: @selector a UISwitch su TableViewCell

Finora ho fatto questo:

funzione setState assegnazione di opporsi:

funzione
[cell.dictTypeSwitch addTarget:self action:@selector(setState:) forControlEvents:UIControlEventTouchUpInside]; 

per la gestione degli eventi:

- (void)setState:(id)sender { 
    BOOL state = [sender isOn]; 
    NSString *rez = state == YES ? @"YES" : @"NO"; 
    NSLog(rez); 
} 

Da mittente ricevo oggetto UISwitch da cui ho può ottenere lo stato.

Finora tutto è ok.

Ma se voglio salvare lo stato di UISwitch, devo ottenere rowIndex per questa cella. Come posso ottenere questo?

The cells are made inside function cellForRowAtIndexPath. Se the code bellow: 

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"DictionariesTableCellViewController"; 
    DictionariesTableCellViewController *cell = (DictionariesTableCellViewController *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 


     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"DictionariesTableCellViewController" owner:nil options:nil]; 

     for (id currentObject in topLevelObjects) { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) { 
       cell = (DictionariesTableCellViewController *) currentObject; 
       break; 
      } 
     } 
    } 

    // Configure the cell... 

    cell.dictTypeLabel.text = [NSString stringWithFormat:@"row - %i",indexPath.row]; 
    [cell.dictTypeSwitch addTarget:self action:@selector(setState:) forControlEvents:UIControlEventTouchUpInside]; 

    return cell; 
} 

Grazie

risposta

4

È possibile utilizzare il .tag property UISwitch per memorizzare un intero arbitrario. Questo può essere impostato sull'indice di riga.

Se è possibile trovare l'UITableViewCell dal genitore UISwitch, si potrebbe ottenere il percorso indice con

NSIndexPath* indexPath = [theTableView indexPathForCell:theCell]; 
+0

Grazie Kenny ... –

Problemi correlati