iphone - uicollectionviewdatasource - uicollectionviewlayout




Метод касания делегата UICollectionView не вызывается (6)

У меня есть представление коллекции, делегат источника данных работает хорошо, но 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 ..

ОБНОВЛЕНИЕ :

WEIRD! это только вызвано, если я долго нажимаю! Как я могу это исправить, я установил delaysContentTouches на NO плюс, у меня нет реализованных распознавателей жестов.

Помогите, пожалуйста. Благодарю.


Может быть, вы должны использовать жест касания в представлении коллекции.


Похоже, вы добавили TapGestureRecognizer где-то, и это предотвращает выбор ячейки. Проверьте их, это должно быть проблемой.


У меня была похожая проблема с PSUICollectionView (это работает и на iOS5), и я исправил ее, поместив кнопку на мой CollectionViewCell и установив цель этой кнопки. Также добавьте теги, чтобы узнать, какая кнопка нажата.


Убедитесь, что нет объектов, устанавливающих для свойства userInteractionEnabled значение NO в UICollectionViewController .

Подобно тому, что говорят другие люди, у меня была такая же проблема, и она была исправлена ​​путем удаления вызова userInteractionEnabled когда родительское представление добавляло его в качестве дочернего контроллера представления. Я смог проверить это, добавив UIButton в ячейку и определив, что даже она не может получать сенсорные события.


в файле .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]; 

и настройте ячейку с помощью 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


Добавление сюда в качестве ссылки для других людей, которые ищут ответ

Короткий ответ:

Задержка касаний распознавателей жестов по умолчанию, связанных с табличным представлением:

    if let gestures = tableView.gestureRecognizers{
        for gesture in gestures {
            gesture.delaysTouchesBegan = true
        }
    }

объяснение

С каждым табличным представлением связаны распознаватели жестов. Что вызывает задержки касаний к пользовательской ячейке UItableView. Установите для свойства delaysTouchesBegan значение true, чтобы касание можно было быстро передать подпредставлениям.

В моем случае это был CollectionViewController внутри UItableViewCell, для которого collectionView: didSelectItemAtIndexPath вызывался с задержкой.







uicollectionview