UICollectionView метод передачи делегата не вызван
У меня есть представление коллекции, делегат datasource работает хорошо, но UICollectionViewDelegate
:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didselect");
}
не вызывается, хотя я устанавливаю делегат (как я это делал с источником данных, и он работал)
Я должен упомянуть, что моя ячейка загружена из наконечника и связана с подклассом UICollectionViewCell
, так или иначе клетки не реагируют на мое прикосновение. Я включил взаимодействие пользователя в UIImageView
, который находится в моей ячейке.
также:
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"this is caled");
return YES;
}
не вызывается!
как я уже говорил, я установил:
[self.collectionView setDelegate:self];
и, конечно,
<UICollectionViewDelegate>
также у меня нет переопределения touchBegan
.
UPDATE
WEIRD! его только называют, если я долго буду настаивать! как я могу это исправить, я устанавливаю delaySontentTouches на NO plus, у меня нет никаких распознавателей жестов.
помогите пожалуйста. спасибо.
Ответы
Ответ 1
Похоже, что в иерархии представлений есть UITapGestureRecognizer
. По умолчанию UITapGestureRecognizer
потребляет прикосновение, которое они получают, что означает, что оно не передается в представления ниже под иерархией. Вам нужно найти жест из жулика и добавить эту строку
tapGestureRecognizer.cancelsTouchesInView = NO;
Это приведет к тому, что он перейдет к просмотрам под ним в иерархии и, надеюсь, решит вашу проблему.
Ответ 2
Похоже, вы добавили TapGestureRecognizer где-то, и он предотвращает selecton ячейки. Проверьте их, это должно быть проблемой.
Ответ 3
Я столкнулся с той же проблемой, что нажав на пользовательскую ячейку UICollectionView, он не обнаружил клик.
В моем случае проблема заключалась в том, что в CustomCell Xib было включено действие userInteraction и почему UICollectionview didSelectItemAtIndexPath не вызывался, вместо этого пользовательская информация была отправлена в эту конкретную ячейку, для которой у меня не было обработчика.
Ответ 4
У меня была аналогичная проблема с PSUICollectionView (это тоже работает на iOS5), и я исправил ее, поместив кнопку в свой CollectionViewCell и установив цель этой кнопки
Также добавьте тег, чтобы узнать, какая кнопка нажата.
Ответ 5
Может быть, вы должны использовать жестов tap в представлении коллекции.
Ответ 6
в файле ur.h, импортируйте CellViewController и добавьте делегат
#import "myColleCell.h"
UIViewController<UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
в ur.m файле, добавьте следующие коды к ur 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];
и установим ячейку с ur 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;
}
и, наконец, убедитесь, что ваш cellView, collectionView настроен на взаимодействие с пользователем YES
Ответ 7
Убедитесь, что нет объектов, устанавливающих свойство userInteractionEnabled
в NO
на UICollectionViewController
.
Подобно тому, что говорят другие люди, у меня была такая же проблема, и это было исправлено, удалив вызов userInteractionEnabled
, где родительское представление добавляло его в качестве контроллера детского представления. Я смог проверить это, добавив в ячейку UIButton
и определив, что даже он не смог получить события касания.
Ответ 8
Добавление здесь в качестве ссылки для других людей, которые ищут ответ
Короткий ответ:
Задержка касаний распознавателей жестов по умолчанию, связанных с табличным представлением:
if let gestures = tableView.gestureRecognizers{
for gesture in gestures {
gesture.delaysTouchesBegan = true
}
}
Объяснение
В каждом представлении таблицы есть связанные с ним распознаватели жестов. Это приводит к задержкам касаний к пользовательской ячейке UItableView. Установите для параметра delayaysTouchesBegan значение true, чтобы прикосновение можно было быстро передать в subviews.
В моем случае это был CollectionViewController внутри UItableViewCell, для которого был вызван метод collectionView: didSelectItemAtIndexPath с задержкой.