Frage

Also habe ich eine benutzerdefinierte TableViewCell erstellt, und in der Spitze habe ich eine UISwitch. Bevor ich es sogar süchtig war, etwas nach oben, wenn ich es im Simulator lief und klickte auf sie wäre es schaltet von Aus auf mit der Animation und so weiter.

Ich versuche, eine Funktion hinzuzufügen, wenn der Benutzer nur von Aus auf mehr ändern, wenn eine bestimmte Bedingung erfüllt ist. Ich will es so, wenn der Benutzer den Schalter berührt, überprüft er, ob die Bedingung erfüllt ist, und wenn es nicht der Schalter bewegt sich nicht.

Ich habe eine IBAction eingerichtet, in dem, wenn der Benutzer innerhalb Touches nach oben, es würde meine Funktion ausführen. Meine Funktion ist dies:

if([on_switch isOn])
    {
        if([my_switch canSwitchOn])
        {
            NSLog(@"SWITCHED ON SUCCESSFULLY");
            [on_switch setOn:TRUE animated:TRUE];
        }
        else
        {
            NSLog(@"SWITCHED ON UNSUCCESSFULLY");
                        //Put in popup here
        }
    }
    else
    {
        [[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index];
        [on_switch setOn:FALSE animated:TRUE];
    }

Doch egal, was ich tue, wird dieser Schalter umlegen, obwohl ich ihm keine Richtungen gab, dies zu tun. Ich bin mir ziemlich sicher, dass es das Auto-Flip, die sie verursachen so selbst zu tun, bevor ich etwas gehakt hatte bis zu ihm. Gibt es eine Möglichkeit, dass auszuschalten?

Danke!

War es hilfreich?

Lösung

Was Sie tun müssen, ist festgelegt userInteractionEnabled Eigenschaft auf False auf UISwitch.

Wenn Sie bereits die Verbindung im Interface Builder zu einem IBOutlet gemacht haben Sie in Ihrer besitzenden Klasse delared, würden Sie in der Lage sein, es so in Code zu setzen:

mySwitch.userInteractionEnabled = NO;

Sie können auch die Eigenschaft direkt im Interface Builder festlegen, indem Sie das Kontrollkästchen, wie unten gezeigt (jedoch in Ihrer Anwendung, werden Sie die Taste bis zu einem IBOutlet verkabeln müssen ohnehin Ihre bedingte Logik zu implementieren.) alt text http://www.clixtr.com/photo/ef06c1f7- 8cca-40cd-a454-5ca534ceb9fe

Andere Tipps

Ich glaube, Sie so etwas wie die folgenden benötigen:

// Somewhere just after the creation of _switch
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];

// Target/Action method
- (void)switchValueDidChange:(UISwitch *)sender {
    if(sender.on && [self canSwitchOn] == NO){
        [sender setOn:NO animated:YES];
        // Popup
    }
}

Problem Sie haben sind, ist, dass der Schalter bereits verpflichtet hat, es auf Ausbesserungs auf Zustand. Wenn das nicht der Fall ist (ich bin mir nicht sicher, nie getestet) Sie prüfen, ob der Schalter zur Zeit nicht auf. Dieses Stück Code wird den Zustand zurück, wenn der Benutzer nicht erlaubt war, den Schalter zu wechseln.

Ein besserer Weg ist es, die Kontrolle zu deaktivieren, aber vielleicht, was das ist nicht, dass Sie in diesem Fall mögen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top