J'essaie d'ajouter des sous-vues à un UIButton. Cela fonctionne bien en ce moment. Mais le bouton n'est plus cliquable dès que j'ajoute les sous-vues.
J'utilise le code suivant:
UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(column*100+24, row*80+10, 64, 64);
[button addSubview:asyncImage];
[button addSubview:price];
[button addTarget:self
action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
Le bouton fonctionne à nouveau si je coupe les 2 vues supplémentaires. Si quelqu'un sait comment résoudre ce problème, ce serait formidable!
THNX !!!
J'ai trouvé des solutions rapides. J'avais besoin de définir asyncimageview comme suit:
asyncImage.userInteractionEnabled = NO;
asyncImage.exclusiveTouch = NO;
Après cela, cela a fonctionné!
essayer:
[UIButton buttonWithType:UIButtonTypeCustom];
au lieu de:
[UIButton buttonWithType:UIButtonControlType];
Avez-vous essayé de mettre:
[asyncImage setUserInteractionEnabled:YES];
L'important ici est de s'assurer que userInteractionEnabled
sera défini sur NO
. Heureusement, cela fonctionne immédiatement pour UIImageView
et UILabel
(peut-être pour d'autres sous-classes d'un UIView
mais ce sont les sous-vues les plus populaires ajoutées au bouton) car par défaut pour cette classe, c'est défini sur NO
par défaut. Malheureusement, il est défini sur YES
dans UIView
alors assurez-vous de le changer dans ce cas. Jouer avec d'autres drapeaux ne devrait pas être nécessaire. La nature du problème est que de nombreuses personnes ne savent pas que la valeur par défaut de cet indicateur est différente dans les sous-classes.
dans la même situation, je fais cette action: hériter de UIButton et ajouter toutes les étiquettes et images du bouton à soi-même, enfin mettre un nouveau bouton pour afficher comme dernière sous-vue et ajouter des cibles de bouton auto à ce dernier bouton (également définir backgroundColor à clearColor pour transparent ). maintenant, il sera cliquable et fonctionne très bien.
Dans Swift, testez que votre UIButton est bloqué
uibtn.userInteractionEnabled = false
uibtn.exclusiveTouch = false