Wie kann man feststellen, wenn eine UISwitch
innerhalb einer UITableViewCell
abgegriffen wurde?Wie kann man feststellen, wenn ein UISwitch innerhalb einer UITableViewCell angezapft wurde?
Mein UISwitch
ist innerhalb der Zelle (generischen Zelle) wie folgt ein:
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
Und ich versuche einen Hahn wie diese zu erkennen (aber seine Arbeit nicht):
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSUserDefaults *prefs;
if(indexPath.section == 1){
switch(indexPath.row)
{
case 0:
NSLog(@"Tapped Login Switch");
break;
default:
break;
}
}
}
Dave DeLong vorgeschlagen, dass ich eine Aktion für jeden Schalter als eine Lösung festlegen. Also habe ich folgendes den Schalter einzustellen:
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[mySwitch addTarget:self action:@selector(switchToggled2:) forControlEvents: UIControlEventTouchUpInside];
if(at_songs){
[mySwitch setOn:YES animated:NO];
}
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
und die folgenden zu wissen, wann er abgehört wurde:
-(IBAction)switchToggled1:(id)sender {
NSUserDefaults *prefs;
NSLog(@"Tapped Login Switch");
prefs = [NSUserDefaults standardUserDefaults];
if(at_login){
[prefs setObject:@"NO" forKey:@"autotweet_login"];
at_login = NO;
}else{
[prefs setObject:@"YES" forKey:@"autotweet_login"];
at_login = YES;
}
}
Einschalten des Schalters ist das kein Problem. Das Problem JETZT ist, dass, wenn der UISwitch auf OFF gestellt ist, seine Aktion aus irgendeinem Grund zweimal aufgerufen wird (und ich 2 NSLogs für 1 Tap bekomme).
Warum wird die Aktion zweimal für nur einen Wasserhahn immer genannt den Schalter auszuschalten? Wie repariere ich es?
Danke. Anstatt die Tag-Eigenschaft zu verwenden, habe ich für jeden Switch eine spezifische Aktion (switchToggled1, switchToggled2) erstellt. Aber es gibt ein Problem: Wenn ich einmal auf den Schalter klicke, wird die Aktion aus irgendeinem Grund zweimal aufgerufen. Warum sollte es zweimal angerufen werden? (UPDATE: Das Ausschalten des Schalters ruft die Aktion zweimal auf, das Einschalten des Schalters ruft die Aktion nur einmal auf) – RexOnRoids
Das sollte @selector NOT @selection im obigen Beispielcode sein. Das kostete mich ungefähr eine halbe Stunde Zeit, um das herauszufinden. –
@ Chuck whoops! Das tut mir leid. Das ist der Nachteil der Eingabe von Code in einem Browser ... –