2012-04-04 5 views
3

Ich habe einen UISwitch in einem UITableViewCell hinzugefügt, der Tabelleninhalt ist Dynamik, was bedeutet, dass es viele UISwitches in einer Tabellenansicht geben kann, ich muss den UISwitch-Status für jedes UITableViewCell erhalten nicht die indexPath in accessoryButtonTappedForRowWithIndexPath Methode bekommen.IndexPath für das Antippen von UISwitch in einem UITableViewCell nicht

mein Code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    LocationCell *cell = (LocationCell *)[tableView 
              dequeueReusableCellWithIdentifier:@"LocationCell"]; 

    UISwitch *useLocationSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; 
    [cell addSubview:useLocationSwitch]; 
    cell.accessoryView = useLocationSwitch; 

    [useLocationSwitch addTarget: self 
       action: @selector(accessoryButtonTapped:withEvent:) 
    forControlEvents: UIControlEventTouchUpInside]; 

    return cell; 
} 

- (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event 
{ 
    NSIndexPath * indexPath = [showLocationTableView indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: showLocationTableView]]; 
    if (indexPath == nil) 
     return; 

    [showLocationTableView.delegate tableView: showLocationTableView accessoryButtonTappedForRowWithIndexPath: indexPath]; 
} 

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ 
    NSLog(@"index path: %@", indexPath.row); 
} 

Antwort

5

Die Steuer Ereignis UIControlEventValueChanged sein sollte.

Nicht UIControlEventTouchUpInside. Ändern Sie das und versuchen Sie es erneut.

die Aktion Erklärung sollte also wie folgt aussehen:

[useLocationSwitch addTarget: self 
         action: @selector(accessoryButtonTapped:withEvent:) 
      forControlEvents: UIControlEventValueChanged]; 

Edit:

- (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event 
{ 
    UISwitch *switch1 = (UISwitch *)button; 
    UITableViewCell *cell = (UITableViewCell *)switch1.superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

    //NSIndexPath * indexPath = [showLocationTableView indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: showLocationTableView]]; 
    if (indexPath == nil) 
     return; 

    [showLocationTableView.delegate tableView: showLocationTableView accessoryButtonTappedForRowWithIndexPath: indexPath]; 
} 
+0

noch nicht Indexwert – Firdous

+0

bekomme ich meine Antwort aktualisiert haben. Es ist nicht getestet. Ich werde es bald testen (ein paar Minuten), sobald ich in die Mac-Maschine komme. – Ilanchezhian

+0

Ja, es ist getestet und sollte den erwarteten Wert geben. – Ilanchezhian