J'ai une vue de collection, le délégué de source de données fonctionne bien, mais UICollectionViewDelegate
name__:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didselect");
}
ne pas être appelé, bien que je mette le délégué (comme je l'ai fait avec la source de données et cela a fonctionné) Je dois mentionner que ma cellule est chargée à partir d'un nib et est connectée à une sous-classe de UICollectionViewCell
name__, de toute façon les cellules pas répondre à mon contact. J'ai activé l'interaction utilisateur dans la UIImageView
qui se trouve dans ma cellule.
également :
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"this is caled");
return YES;
}
ne se fait pas appeler!
comme je l'ai mentionné, j'ai défini:
[self.collectionView setDelegate:self];
et bien sur
<UICollectionViewDelegate>
de plus, je n'ai pas de substitution touchBegan
..
METTRE &AGRAVE; JOUR:
BIZARRE! on l'appelle seulement si j'appuie longuement! comment puis-je résoudre ce problème, je règle NON au contenu de delayContentTouches et je n’ai aucun dispositif de reconnaissance de geste mis en œuvre.
aidez-moi, s'il vous plaît. Merci.
Il semble qu'il y ait une UITapGestureRecognizer
quelque part dans la hiérarchie des vues. Par défaut, UITapGestureRecognizer
s consomme le toucher reçu, ce qui signifie qu'il n'est pas transmis aux vues situées en dessous dans la hiérarchie. Vous devez trouver le geste de tapotage malhonnête et ajouter cette ligne
tapGestureRecognizer.cancelsTouchesInView = NO;
Cela le fera passer des contacts aux vues en dessous dans la hiérarchie et, espérons-le, résoudre votre problème.
On dirait que vous avez ajouté TapGestureRecognizer quelque part et empêche la sélection de la cellule. Vérifiez-les, cela devrait être le problème.
Je rencontrais le même problème, à savoir que cliquer sur la cellule UICollectionView personnalisée ne détectait pas le clic. Dans mon cas, le problème était que, dans le Xib de CustomCell, userInteraction était activé et que le didSelectItemAtIndexPath de UICollectionview était ne pas être appelé, à la place, les informations de tap de l'utilisateur étaient envoyées à cette cellule particulière pour laquelle je n'avais pas de gestionnaire.
J'ai eu un problème similaire avec PSUICollectionView (cela fonctionne aussi sur iOS5) et je l'ai corrigé en plaçant un bouton sur mon CollectionViewCell et en définissant la cible de ce bouton Ajoutez également des balises pour savoir quel bouton est enfoncé.
Ajouter ici comme référence pour les autres personnes à la recherche de la réponse
Réponse courte:
Retardez les touches des identificateurs de mouvements par défaut associés à la vue de table:
if let gestures = tableView.gestureRecognizers{
for gesture in gestures {
gesture.delaysTouchesBegan = true
}
}
Explication
Chaque tableview est associée à des identificateurs de geste. Ce qui provoque les retards de contact avec la cellule UItableView personnalisée. Définissez delayTouchesBegan sur true afin que le contact puisse être passé rapidement aux vues secondaires.
Dans mon cas, il s'agissait de CollectionViewController inside UItableViewCell pour lequel collectionView: didSelectItemAtIndexPath était appelé avec un délai.
dans votre fichier .h, importez CellViewController et ajoutez un délégué
#import "myColleCell.h"
UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
dans votre fichier .m, ajoutez les codes suivants à votre ViewDidLoad
,
UINib *cellNib = [UINib nibWithNibName:@"myColleCell" bundle:nil];
[myCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myColleCell"];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setItemSize:CGSizeMake(220, 220)];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[myCollectionView setCollectionViewLayout:flowLayout];
et mettre en place la cellule avec votre CellViewController
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier= @"myColleCell";
myColleCell *cell = (myColleCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
[cell setupCell:[dataArray objectAtIndex:indexPath.row]];
//setup cell function methods placed in your CellViewController
return cell;
}
et enfin, assurez-vous que votre cellView, collectionView est défini comme utilisateur interactif sur YES
Assurez-vous qu'aucun objet ne définit la propriété userInteractionEnabled
à NO
sur la UICollectionViewController
.
Comme ce que disent d’autres personnes, j’ai eu le même problème et ce problème a été résolu en supprimant un appel à userInteractionEnabled
où la vue parent l’ajoutait en tant que contrôleur de vue enfant. J'ai pu tester cela en ajoutant un UIButton
à la cellule et en déterminant que même elle ne pouvait pas recevoir les événements tactiles.