Empêcher plusieurs Tapez sur le même UIButton
Quelques fois dans mon application, j'obtiens cette erreur parce que l'INTERFACE utilisateur se bloque, et les utilisateurs, appuyez sur plus d'une fois les boutons:
"en poussant le même point de vue, contrôleur de l'instance, plus d'une fois n'est pas
pris en charge"
J'ai essayé ceci:
Comment faire pour empêcher plusieurs événements sur le même UIButton dans iOS?
Et il fonctionne comme un charme, mais si mon tabbar a plus de 5 éléments, si je l'onglet bouton qui affiche un élément de plus de 5 le bouton plus anime de gauche à droite.
Est-il d'autre moyen pour empêcher la double onglet dans une façon simple qui n'utilise pas les animations?.
C'est le code que j'utilise:
- (IBAction)btnAction:(id)sender {
UIButton *bCustom = (UIButton *)sender;
bCustom.userInteractionEnabled = NO;
[UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowAnimatedContent animations:^{
[self selectTabControllerIndex:bCustom.tag];
} completion:^(BOOL finished){
bCustom.userInteractionEnabled = YES;
}];
}
OriginalL'auteur Marco Antonio Uzcategui Pescoz | 2016-05-20
Vous devez vous connecter pour publier un commentaire.
D'abord un conseil, si vous avez seulement un bouton d'appel qui sélecteur, vous pouvez modifier la
id
àUIButton*
et de la baisse de la variable supplémentairebCustom
.Maintenant, pour résoudre votre problème, vous avez juste besoin de s'assurer que vous tournez
userInteractionEnabled
retour àYES
après vous avais fait tout ce que vous avez besoin de faire. En utilisant le bloc d'animation est juste un moyen facile parce qu'il a un gestionnaire d'achèvement construit dans.Vous pouvez le faire simplement en ayant
selectTabControllerIndex
méthode de faire le travail pour vous.Quelque chose comme ceci:
Si vous avez peut-être eu d'autres code nécessaire à l'exécution par la suite, vous pouvez ajouter un gestionnaire d'achèvement à votre
selectTabControllerIndex
plutôt la méthode et ensuite appeler le gestionnaire d'achèvement. À l'intérieur que vous d inclure lasender.userInteractionEnabled = YES;
ligne. Mais si c'est toujours le même code, la première manière est plus facile et plus rapide.OriginalL'auteur Dave Wood
À l'aide de
userInteractionEnable=false
pour éviter le double tap est comme à l'aide d'un lance-Roquettes pour tuer une abeille.Au lieu de cela, vous pouvez utiliser
myButton.enabled=false
.En utilisant cela, vous pouvez être en mesure de modifier ( si vous voulez ) la mise en page de votre bouton quand il est désactivé.Le problème est que
userInteractionEnable
est une propriété en vue, etmyButton.enabled=false
est un UIButton de la propriété. Donc, vous devriez toujours utiliser la manière d'Apple vous permet d'atteindre votre objectif.Notez que l'utilisation de la
enabled
propriété a d'autres effets secondaires qui ne sont pas désirés dans un cas comme celui-ci. Ceux sont des changements de l'INTERFACE, comme la modification de la couleur, du texte, des images qui sont sur le bouton pour indiquer à l'utilisateur le bouton est désactivé. Cela signifie que vous aurez une sorte de flash lorsque le bouton est désactivé puis activé à nouveau peu de temps après, ce qui peut distraire/dérouter l'utilisateur. Aussi, merci de ne pas tuer les abeilles. 🙂OriginalL'auteur CZ54
OriginalL'auteur RemembranceNN
Vous pouvez désactiver la userInteraction pour ce bouton lorsque l'utilisateur appuie pour la première fois.
Puis à new-vue-contrôleur apparaît, tout en laissant à la nouvelle-Vue-Contrôleur appel de cette
si c'est le déplacement d'un autre point de vue alors appel ci-dessous un
si ne bouge pas de vue
vous pouvez appeler
à la fin de btnAction méthode.
Il va travailler pour vous.
OriginalL'auteur Santo
Dans Swift, vous pouvez également utiliser
defer
mot-clé, exécuter un bloc de code qui sera exécuté uniquement lors de l'exécution laisse le champ d'application actuel.Note: Cela ne sera utile que si le "reste de votre code" n'est pas
async
, de sorte que l'exécution laisse le champ d'application actuel.Dans async cas, vous aurez besoin de définir
isUserInteractionEnabled = true
à la fin de cette méthode async.OriginalL'auteur Dima Gershman