Désactiver le réglage automatique de commutation lorsque vous cliquez dessus sur UISwitch?

StackOverflow https://stackoverflow.com/questions/1690715

  •  18-09-2019
  •  | 
  •  

Question

J'ai donc créé une coutume TableViewCell, et la plume, je mets un UISwitch. Avant que je ne l'avais même pas accroché à quoi que ce soit, si je courais dans le simulateur et cliqué dessus, il doit passer de off à l'animation avec et autres.

Je suis en train d'ajouter une fonctionnalité où l'utilisateur est uniquement autorisé à changer de OFF à quand une certaine condition est vraie. Je veux ainsi, lorsque l'utilisateur touche le commutateur, il vérifie si la condition est vraie, et si elle ne l'est pas l'interrupteur ne se déplace pas.

J'ai mis en place un IBAction où, si l'utilisateur touche à l'intérieur, il va courir ma fonction. Ma fonction est la suivante:

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

Cependant, peu importe ce que je fais, ce commutateur inversera, même si je lui ai donné aucune instruction de le faire. Je suis sûr que c'est l'auto-flip amener à le faire même avant que je ne rien accroché à elle. Est-il possible de transformer ce congé?

Merci!

Était-ce utile?

La solution

Ce que vous devez faire est de définir la propriété userInteractionEnabled False sur votre UISwitch.

Si vous aviez allready fait le lien dans Interface Builder un IBOutlet vous delared dans votre classe possédante, vous seriez en mesure de le mettre dans le code comme ceci:

mySwitch.userInteractionEnabled = NO;

Vous pouvez également définir la propriété directement dans Interface Builder en sélectionnant la case à cocher, comme indiqué ci-dessous (Cependant, dans votre application, vous allez avoir besoin de câbler le bouton jusqu'à une IBOutlet de toute façon de mettre en œuvre votre logique conditionnelle.) texte alt http://www.clixtr.com/photo/ef06c1f7- 8cca-40CD-a454-5ca534ceb9fe

Autres conseils

Je pense que vous besoin de quelque chose comme ce qui suit:

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

problème que vous rencontrez est que le commutateur a déjà engagé il est sur l'état de mise en contact. Lorsque ce n'est pas le cas (je ne suis pas sûr, jamais testé) vous devez vérifier si le commutateur est actuellement pas . Ce morceau de code retournera l'état lorsque l'utilisateur n'a pas été autorisé à passer le commutateur.

Une meilleure façon est de désactiver le contrôle, mais peut-être que ce n'est pas ce que vous voulez dans ce cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top