50 votes

Le bouton dans UITableViewCell ne répond pas sous ios 7

J'ai un tableau et chaque cellule contient un bouton. Cela fonctionne assez bien toutes les versions iOS, mais 7. Je ne sais pas ce qui se passe. La cellule est construite dans un fichier xib.

Quelqu'un pourrait-il me donner des suggestions? Merci d'avance.

70voto

b005t3r Points 266

Ce qui a fonctionné pour moi est la suivante:

 contentView.userInteractionEnabled = NO;
 

appelé après le chargement de ma cellule personnalisée à partir de nib. Il semble que cette vue de contenu soit créée et définie en tant que vue enfant de niveau supérieur après la création des vues définies dans le fichier nib.

32voto

yonix Points 1850

L'appel de [cell bringSubviewToFront:button] après le chargement de la cellule de nib a résolu ce problème pour moi.

30voto

us_david Points 21

J'ai aussi été aux prises avec ce problème et j'ai fait beaucoup de recherche sur les différentes réponses sur stackoverflow et sur internet, la solution est différente selon la source du problème. Pour la plupart des cas, vous devez effectuer les opérations suivantes avec l'élément qui est censé prendre action de l'utilisateur (appuyez/cliquez sur etc.):
myButton.userInteractionEnabled = YES;

En particulier pour les UILabel/UIImageView, par défaut, l' userInteractionEnabled drapeau est - NO.

Si vous êtes le chargement de la vue à partir d'un xib, vous devez vous assurer que, à partir de la cellule personnalisé de vue, le contenu de la vue, et l'élément que vous voulez l'action de l'utilisateur est activée, tous ont la case cochée:
enter image description here

Dans l'exemple ci-dessus, DeviceViewCell, l'Affichage du Contenu et Bouton élément tous ont "l'Interaction de l'Utilisateur Activé lacase à cocher" cochée.
Si la cellule personnalisé est mis en œuvre comme une sous-classe de UITableViewCell, et la coutume vue sur les cellules est chargé à partir d'un autre fichier xib de façon dynamique, vous AVEZ À FAIRE une chose de plus qui est source de confusion pour la plupart des gens, mais je vais vous expliquer pourquoi plus tard:
Dans la cellule personnalisé de la méthode d'initialisation, vous devez effectuer les opérations suivantes:
self.contentView.userInteractionEnabled = NO

self est la sous-classe de UITableViewCell vous avez créé. Encore une fois, SI la cellule personnalisé est mis en œuvre comme une sous-classe de UITableViewCell, et la coutume vue sur les cellules est chargé à partir d'un autre fichier xib DYNAMIQUEMENT, vous devez faire ce qui précède. Voici l'explication:

self.contentView n'est PAS le même Content View vous voir dans Interface Builder, il est créé par le système comme l' default content view qui est au-DESSUS de tous les autres points de vue et les éléments au sein de votre cellule personnalisé de vue, et elle occulte le reste de vues dans le point de vue de la hiérarchie. Par conséquent, vous aurez besoin de désactiver l'interaction de l'utilisateur pour les éléments d'INTERFACE utilisateur dans la cellule personnalisé vue peut recevoir de l'interaction de l'utilisateur des événements. Espérons que cette aide. Si vous avez une meilleure explication que j'aimerais l'entendre :-). De nouveau est est de mon observation et il pourrait y avoir d'autres raisons. La Discussion est la bienvenue!

4voto

Collin Points 1076

J'ai vécu le même problème. Il s’avère que j’ai créé un objet UIView dans IB, puis défini sa classe sur une sous-classe de UITableViewCell.

Étant donné que l'objet que j'avais créé à l'origine dans IB était un UIView, le contenu de UITableViewCell n'a été ajouté qu'au moment de l'exécution, ce qui s'est avéré être au-dessus de mes boutons UIB, ce qui les rend non sélectionnables.

3voto

Adrian Silveanu Points 36

My Cell's outline

Dans mon cas, tout ce que je voudrais à l'utilisateur d'interagir avec l'extérieur de la ContentView. Aussi je ne veux pas que la cellule soit mis en surbrillance lorsqu'il est sélectionné.

Toutes les étiquettes (Nom, Catégories, etc.) sont immédiatement sous la rubrique "Contenu de la Vue". Le WebsiteButton n'est pas sous "Affichage du Contenu", mais il est dans "Répertoire Local Cellule de Tableau".

Dans mon tableViewController méthode tableView:cellForRowAtIndexPath: j'ai le code suivant: cellule.contentView.userInteractionEnabled = NON;

C'est tout et que l'utilisateur est en mesure d'interagir avec le bouton. Je n'utilise PAS [cellule bringSubviewToFront:de la cellule.websiteButton];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X