Domanda

Così ho creato un personalizzato TableViewCell, e nel pennino ho messo un UISwitch. Prima avevo anche agganciato fino a nulla, se ho fatto funzionare nel simulatore e cliccato su di esso, sarebbe passare da off a on con l'animazione e così via.

Sto cercando di aggiungere una caratteristica in cui l'utente è consentito solo per passare da OFF a ON quando una certa condizione è vera. Lo voglio così, quando l'utente tocca l'interruttore, controlla se la condizione è vera, e se non è l'interruttore non si muove.

Ho creato un IBAction dove se l'utente tocca Inside, sarà eseguito la mia funzione. La mia funzione è questa:

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

Tuttavia, non importa quello che faccio, che switch capovolgere, anche se ho dato alcuna indicazione in tal senso. Sono abbastanza sicuro che sia l'auto-flip che causano a farlo anche prima di aver agganciato nulla fino ad esso. C'è un modo per trasformare quello fuori?

Grazie!

È stato utile?

Soluzione

Quello che dovete fare è impostare la proprietà userInteractionEnabled False sul UISwitch.

Se si aveva giá fatto il collegamento in Interface Builder a un IBOutlet si delared nella classe proprietaria, si sarebbe in grado di impostare in codice come questo:

mySwitch.userInteractionEnabled = NO;

Si può anche impostare la proprietà direttamente in Interface Builder selezionando la casella di controllo, come mostrato di seguito (Tuttavia nella vostra applicazione, si sta andando ad avere bisogno di cablare il pulsante fino a un IBOutlet comunque per implementare la logica condizionale.) alt text http://www.clixtr.com/photo/ef06c1f7- 8cca-40cd-a454-5ca534ceb9fe

Altri suggerimenti

Credo che avrete bisogno di qualcosa di simile a quanto segue:

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

problema che stai avendo è che l'interruttore ha già commesso è stato di acceso ritocco. Quando questo non è il caso (non sono sicuro, non testato) è necessario verificare se l'interruttore è attualmente non . Questo bit di codice tornerà lo stato in cui l'utente non è stato permesso di commutare l'interruttore.

Un modo migliore è quello di disabilitare il controllo, ma forse non è questo ciò che si desidera in questo caso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top