2010-07-08 19 views
6

UITableView'imde hücreleri yönetmek için TableCellViewController var. Her bir hücrenin bir UISwitch (dictTypeSwitch) etiketi vardır. Olayları değiştirmek için bir yöntem atamak istiyorum, böylece buton durumunu kaydedebiliyorum. itirazÖzel eylem ekle: @selector için UISwitch üzerinde TableViewCell

atama setState fonksiyonu:

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

fonksiyonunu olayını işlemek için:

Şimdiye kadar yaptık gönderenin itibaren

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

Ben UISwitch nesneyi elde ettiğimiz Ben devlet alabilir. Şimdiye kadar her şey yolundadır.

Ancak, UISwitch durumunu kaydetmek istiyorsam, bu hücre için rowIndex almak zorundayım. Bunu nasıl başarabilirim?

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

Teşekkür

cevap

4

Sen UISwitch en .tag property keyfi bir tamsayı saklamak için kullanabilirsiniz. Bu satır dizinine ayarlanabilir. o UISwitch en ebeveynden UITableViewCell bulmak mümkün olursa

, sen

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

Teşekkür Kenny ile endeks yolunu alabilir ... –