web-dev-qa-db-fra.com

Désactiver l'interaction de l'utilisateur dans une vue IOS

Je désactive et active une vue à l'aide du code suivant ....

[self.view setUserInteractionEnabled:NO];
[self.view setUserInteractionEnabled:YES];

Si j'aime cela, toutes ses sous-vues sont également affectées ... Toutes sont désactivées, comment faire uniquement pour une vue particulière? C'est possible?

27
Newbee

C'est exactement la même chose, en supposant que votre autre vue soit membre ou que vous puissiez parcourir le tableau de sous-vues de self.view, Comme ceci:

MyViewController.h

UIView* otherView;

MyViewController.m

otherView.userInteractionEnabled = NO; // or YES, as you desire.

OU:

for (int i = 0; i < [[self.view subviews] count]; i++)
{
    UIView* view = [[self.view subviews] objectAtIndex: i];

    // now either check the tag property of view or however else you know
    // it's the one you want, and then change the userInteractionEnabled property.
}
33
Luke

Dans Swift UIView ont la propriété userInteractionEnabled pour la rendre réactive ou non. Pour rendre le code d'utilisation complet ne répond pas:

// make screen unresponsive
self.view.userInteractionEnabled = false
//make navigation bar unresponsive
self.navigationController!.view.userInteractionEnabled = false

// make screen responsive
self.view.userInteractionEnabled = true
//make navigation bar responsive
self.navigationController!.view.userInteractionEnabled = true
13
Rahul Raina
for (UIView* view in self.view.subviews) {

    if ([view isKindOfClass:[/*"which ever class u want eg UITextField "*/ class]])

        [view setUserInteractionEnabled:NO];

}

j'espère que cela aide. codage heureux :)

5
Anshuk Garg

La meilleure option est d'utiliser la propriété Tag de la vue plutôt que d'itérer toutes ses sous-vues. Définissez simplement la balise sur la sous-vue que vous souhaitez désactiver l'interaction et utilisez le code ci-dessous pour y accéder et désactiver l'interaction.

// considering 5000 is tag value set for subView 
// for which we want to disable user interaction  
UIView *subView = [self.view viewWithTag:5000]; 
[subView setUserInteractionEnabled:NO];
1
BornCoder