web-dev-qa-db-fra.com

addSubView à UIButton

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 !!!

43
Jos

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é!

75
Jos

essayer:

[UIButton buttonWithType:UIButtonTypeCustom];

au lieu de:

[UIButton buttonWithType:UIButtonControlType];

3
user842059

Avez-vous essayé de mettre:

[asyncImage setUserInteractionEnabled:YES];
1
Matteo Alessani

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.

1
Julian Król

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.

1
Valerii Pavlov

Dans Swift, testez que votre UIButton est bloqué

uibtn.userInteractionEnabled = false
uibtn.exclusiveTouch = false
0
YannSteph