ne peut pas cliquer sur UIButton l'intérieur de la cellule UITableview
cherché déjà quelques correctifs possibles, mais tous ne l'ont pas résoudre le mien.
je garder en cliquant sur la cellule dans la uitableview plutôt que des boutons à l'intérieur.
voici mon code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.backgroundColor = [UIColor blackColor];
UIView *v = nil;
NSArray *array = [cell subviews];
for (v in array) {
NSLog(@"%@",[v class]);
if( [v isKindOfClass:[UIView class]] ){
[v removeFromSuperview];
}
}
//tb
if (tableView == self.tb) {
v = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.tb.bounds.size.width, 120.0)];
if([feeds count]>0){
UIImageView *box=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"statusBox.png"]];
box.userInteractionEnabled = YES;
[v addSubview:box];
AsyncImageView *imageView1 = [[AsyncImageView alloc] initWithFrame:CGRectMake(10, 20.0f, 34.0f, 34.0f)];
imageView1.contentMode = UIViewContentModeScaleAspectFill;
imageView1.clipsToBounds = YES;
//cancel loading previous image for cell
[[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView1];
if (users1 != nil && users1.imagelink != nil && (id) users1.imagelink != [NSNull null]){
imageView1.imageURL = [NSURL URLWithString:users1.imagelink];
}
else{
imageView1.image=[UIImage imageNamed:@"default_ProfilePic.png"];
}
UITapGestureRecognizer *tapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myFunction:)];
tapped.numberOfTapsRequired = 1;
[imageView1 addGestureRecognizer:tapped];
[tapped release];
imageView1.userInteractionEnabled = NO;
[v addSubview:imageView1];
UIFont *font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:11];
UILabel *descLabel1 = [[UILabel alloc] initWithFrame: CGRectMake(52, 23, 160, 48)];
descLabel1.text = [NSString stringWithFormat:@"%@ %@",users1.userfirstn,users1.userlastn];
descLabel1.textColor = [UIColor blackColor];
descLabel1.font = font;
descLabel1.adjustsFontSizeToFitWidth=YES;
descLabel1.numberOfLines = 0;
CGSize expectedLabelSize = [descLabel1.text sizeWithFont:descLabel1.font
constrainedToSize:descLabel1.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGRect newFrame = descLabel1.frame;
newFrame.size.height = expectedLabelSize.height;
descLabel1.frame = newFrame;
descLabel1.numberOfLines = 0;
descLabel1.userInteractionEnabled = NO;
[v addSubview:descLabel1];
UILabel *descLabel2= [[UILabel alloc] initWithFrame: CGRectMake(52, 43, 200, 48)];
StatusClass *stat1=[feeds objectAtIndex:indexPath.row];
descLabel2.text = [stat1 statcreate];
descLabel2.textColor = [UIColor blackColor];
descLabel2.font = font;
descLabel2.adjustsFontSizeToFitWidth=YES;
descLabel2.numberOfLines = 0;
CGSize expectedLabelSize2 = [descLabel2.text sizeWithFont:descLabel2.font
constrainedToSize:descLabel2.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGRect newFrame2 = descLabel2.frame;
newFrame2.size.height = expectedLabelSize2.height;
descLabel2.frame = newFrame2;
descLabel2.numberOfLines = 0;
descLabel2.userInteractionEnabled = NO;
[v addSubview:descLabel2];
UILabel *descLabel3= [[UILabel alloc] initWithFrame: CGRectMake(10, 63, 280, 80)];
StatusClass *stat=[feeds objectAtIndex:indexPath.row];
descLabel3.text = [stat stattext];
descLabel3.textColor = [UIColor blackColor];
descLabel3.font = font;
descLabel3.adjustsFontSizeToFitWidth=YES;
descLabel3.numberOfLines = 0;
descLabel3.userInteractionEnabled = NO;
[v addSubview:descLabel3];
//comment button
UIButton *buttonC = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[buttonC addTarget:self action:@selector(sendComment:) forControlEvents:UIControlEventTouchUpInside];
[buttonC setImage:[UIImage imageNamed:@"comment.png"] forState:UIControlStateNormal];
buttonC.frame = CGRectMake(2, 160, 145, 35);
buttonC.userInteractionEnabled = YES;
[v addSubview:buttonC];
//share button
UIButton *buttonS = [UIButton buttonWithType:UIButtonTypeRoundedRect];
buttonS.tag = indexPath.row;
[buttonS addTarget:self action:@selector(sendShare:) forControlEvents:UIControlEventTouchUpInside];
[buttonS setImage:[UIImage imageNamed:@"share.png"] forState:UIControlStateNormal];
buttonS.frame = CGRectMake(150, 160, 140, 35);
buttonS.userInteractionEnabled = YES;
[v addSubview:buttonS];
}
v.userInteractionEnabled = YES;
[cell addSubview:v];
}
return cell;
}
J'ai aussi essayé la UITapGestureRecognizer
pour les boutons et toujours pas de travail.
Grâce.
définir le style de sélection pour aucun
Je me demandais simplement que le bouton de décalage sur y est donné en 160 et votre point de vue v est la hauteur est de 120. Alors, comment vous en mesure de voir le bouton?
DE BONS YEUX.... je vous remercie. n'ai pas d'avis que l'on. c'est pourquoi il est pas cliquable cause de ses pas dans la vue. sa fonctionne bien maintenant
Commentaire ajouté comme une réponse..
J'ai couru dans cette même situation d'un couple de fois par projet. Quand ça ne fonctionne pas comme prévu, chaque fois que vous ajoutez un bouton comme un sous-vue pour rien, c'1) vue parent doit être capable d'accepter de toucher actions, isUserInteractionEnabled = true. 2) le point de vue est ajouté dans la vue parent correctement, et non pas seulement visible. Cela peut se produire facilement avec les cellules, il est visible sur l'écran, mais les vues sont à l'extérieur des limites de la cellule...il ne sera jamais cliquable.
Je me demandais simplement que le bouton de décalage sur y est donné en 160 et votre point de vue v est la hauteur est de 120. Alors, comment vous en mesure de voir le bouton?
DE BONS YEUX.... je vous remercie. n'ai pas d'avis que l'on. c'est pourquoi il est pas cliquable cause de ses pas dans la vue. sa fonctionne bien maintenant
Commentaire ajouté comme une réponse..
J'ai couru dans cette même situation d'un couple de fois par projet. Quand ça ne fonctionne pas comme prévu, chaque fois que vous ajoutez un bouton comme un sous-vue pour rien, c'1) vue parent doit être capable d'accepter de toucher actions, isUserInteractionEnabled = true. 2) le point de vue est ajouté dans la vue parent correctement, et non pas seulement visible. Cela peut se produire facilement avec les cellules, il est visible sur l'écran, mais les vues sont à l'extérieur des limites de la cellule...il ne sera jamais cliquable.
OriginalL'auteur Long Neutrals | 2013-09-18
Vous devez vous connecter pour publier un commentaire.
Je suis juste perplexe par ce problème....
J'ai réussi à résoudre ce problème en faisant cela, sur un projet:
mais il n'en va pas travailler pour un autre projet. Je n'ai aucune idée de pourquoi...
OriginalL'auteur Mateusz266
Il y a une autre cause potentielle de problèmes comme celui-ci, et qui est
UITableViewCells
ont maintenant unecontentView
. Ceci peut et doit être placé en face d'autres points de vue dans votre tableau personnalisé affichez les cellules afin de ramasser des touches et de détecter les cellules de la sélection. En agissant de la sorte, il peut bloquer touche à tout point de vue derrière elle. J'ai surtout remarqué cette gêne lors de la création de cellules à l'aide de plumes.Le moyen accepté de traiter ce problème est de s'assurer que tous les sous-vues sont ajoutés à ne pas le tableview cellule elle-même, mais à son
contentView
. C'est une propriété en lecture seule qui ajuste sa propre image, dans certaines circonstances, par exemple lorsque glissé de côté pour révéler le bouton supprimer, ou pendant le mode d'édition. Vous devez donc veiller à ce que tous les éléments que vous ajoutez à lacontentView
sont intelligemment de taille moyenne et ont la bonne redimensionnement de comportement.Aussi être conscient que par l'ajout de cellules de la
contentView
, vous pouvez vous-même le bloc de touches et de prévenir ainsi la cellule d'être sélectionné. Personnellement, j'essaie de ne pas permettre à la sélection de cellules dans tableviews contenant des cellules avec de l'utilisateur personnalisé des contrôles activés. Il ne mène qu'à la confusion et maladroit interfaces. En fait, je suis sérieusement penser à le remplacer tous lesUITableViews
dans mes futurs projets avecUICollectionViews
, qui sont beaucoup plus adaptable.-Ash
¿vous pouvez toujours utiliser XIB fichiers et ajouter ce que vous conception de la contentView au lieu de la vue elle-même?
Vous pouvez créer la table en vue de cellules dans une plume ou d'un scénario, aussi longtemps que vous utilisez soit UITableView la possibilité de créer des prototypes de cellules, ou de construire au-dessus d'une table en vue de la cellule objet et enregistrer la plume avec la vue de la table à l'aide de registerNib:forCellWithReuseIdentifier: - j'ai l'habitude d'utiliser prototype de cellules de garder tout propre.
OriginalL'auteur Ash
Votre
UIButton
='s de décalage sur y est donné en 160 etUIView's
hauteur est indiquée à titre de 120. S'il vous plaît changer laUIButton's
décalage sur y et essayez.OriginalL'auteur HRM
Pour Swift 3 et Storyboard
Pour moi, j'ai eu à permettre à de multiples toucher à l'intérieur de l'affichage du contenu, et de permettre une interaction de l'utilisateur sur tout, - l'affichage de la table, la vue de la table de la cellule, le contenu de la vue, et UIButton. J'ai été en utilisant storyboard.
J'ai aussi créé mon tableview cellule comme une sous-classe.
Puisque je ne pouvais pas trouver une réponse ici, quand j'ai exploré le problème, j'ai posté une autre question sur un débordement de pile à ce sujet. Vous pouvez voir mon code et télécharger un projet avec ce travail ici: Peut pas cliquer sur un bouton à l'intérieur de UITableViewCell?
Bizarre je n'ai jamais rencontré cela avant, mais pour une raison sur cette tableview cela a été le cas. En tout cas merci!
OriginalL'auteur Nick
La UITableViewCell est de la manipulation de tous les gestes que par défaut.
Ensemble
cell.selectionStyle = UITableViewCellSelectionStyleNone;
pour faire désactiver le comportement par défaut.Essayez également
[cell.contentView addSubview:v]
au lieu de[cell addSubview:v]
si j'utilise contentView je ne vais pas voir les cellules.
OriginalL'auteur Rickye
J'ai rencontré ce problème, mais dans mon cas, il n'était pas lié à la vue de la table, c'était plutôt parce que j'ai été à l'aide des sous-vues dans mon bouton pour laquelle
userInteractionEnabled
était vrai, réglage de la valeur pour la valeur false (N) pour tous les bouton du sous-vues résolu le problème pour moi.OriginalL'auteur ThomasW
Créer un personnalisé UITableViewCell. Reportez-vous ce lien.
Dire que vous avez un
UIButton
par le nom de displayButton, vous pouvez faire quelque chose comme ceci:À l'intérieur de votre
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
, après la création de votre cellule,Et de le créer la méthode comme dans votre ViewController:
Au lieu de touches [addTarget:auto action:@selector(sendShare:) forControlEvents:UIControlEventTouchUpInside]; Ajouter ce qui suit: [boutons addTarget: action auto: @selector(replyButtonPressed:withEvent:) forControlEvents: UIControlEventTouchUpInside];
OriginalL'auteur Anil
J'ai le même problème, et en quelque sorte j'ai compris mon erreur.
Après j'ai changé le
constraints
avecself(UITableViewCell)
àconstraints
aveccontentView
deself(UITableViewCell)
,ma cellule de bouton est cliquable de nouveau.OriginalL'auteur wj2061
J'ai fait ça:
Et il semble que l'invocation de la addTarget méthode à l'intérieur de la fermeture n'a pas de travail. Quand je compte le addTarget méthode et au lieu de le mettre dans l'initialiseur, tout a fonctionné!
OriginalL'auteur Lord Fresh
Si vous n'avez pas d'alternative sélecteur pour le
UIButton
enfoncé à l'intérieur de certainesUITableViewCell
vous avez besoin de désactiveruserInteractionEnabled
pour le boutonDans ce cas, n'importe quel bouton touch va se propager à la cellule tactile.
OriginalL'auteur malex
essayer cette
Testé sur "Mvvmcross.iOS" seulement
OriginalL'auteur Komicon