2010-07-08 6 views
6

Ich habe TableCellViewController zum Verwalten von Zellen in meinem UITableView. Jede Zelle hat eine Bezeichnung na UISwitch (dictTypeSwitch). Ich möchte Methoden zuweisen, um Ereignisse zu wechseln, damit ich den Status der Schaltfläche speichern kann.Benutzerdefinierte Aktion hinzufügen: @Selector zu UISwitch on TableViewCell

Bisher habe ich dies getan:

assign setState Funktion zum Objekt:

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

Funktion Ereignis für den Umgang:

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

Von Absender erhalte ich UISwitch Objekt, von dem ich kann Staat bekommen.

Bis jetzt ist alles in Ordnung.

Aber wenn ich den Status von UISwitch speichern möchte, muss ich rowIndex für diese Zelle abrufen. Wie kann ich das erreichen?

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

Dank

Antwort

4

können Sie die UISwitch die Verwendung .tag property eine beliebige ganze Zahl zu speichern. Dies kann auf den Zeilenindex eingestellt werden.

Wenn es möglich ist, die UITableViewCell von UISwitch der Eltern zu finden, können Sie den Indexpfad erhalten mit

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

Dank Kenny ... –