UIScrollview в пользовательском UICollectionViewCell не работает

Я пытаюсь заставить UIScrollView работать правильно внутри UICollectionViewCell.

Пользовательская ячейка загружается через файл xib и является подклассом UICollectionViewCell. У меня были проблемы с работой других элементов управления, таких как кнопка и распознаватель жестов, поскольку UICollecitonView, похоже, не передает никаких прикосновений к ячейкам, но я обошел те, у которых есть распознаватели жестов на самом UICollectionView. У меня осталась одна проблема: UIScrollViews...

UICollectionView прокручивается горизонтально, а UIScrollView в ячейках прокручивается вертикально. Я пытался использовать UIPanGestureRecognizer для их прокрутки, но это, похоже, отключило возможность прокрутки UICollectionView's.

У кого-нибудь есть мысли?

РЕДАКТИРОВАТЬ: Понял!

Поэтому я преобразовал в представление коллекции из предыдущей сторонней библиотеки, которую мы использовали до iOS6. Оказывается, проблема была с файлами xib, которые мы использовали для ячеек. Раньше в библиотеке ячейки были просто подклассами UIViews. Я изменил классы на подкласс UICollectionViewCell и обновил пользовательский класс. Оказалось, этого недостаточно. Чтобы касания передавались ячейкам, мне действительно пришлось перетащить новый UICollectionViewCell из библиотеки объектов, скопировать все подпредставления и снова подключить IBOutlets. После этого заработало!


person user2157629    schedule 13.03.2013    source источник
comment
Вы смотрели в UIGestureRecognizerDelegate?   -  person Mick MacCallum    schedule 14.03.2013
comment
У меня есть, и я пытался использовать жестRecognizer:shouldRecognizeSimultaneousWithGestureRecognizer: и все же дополнительный распознаватель панорамирования переопределяет поведение прокрутки по умолчанию... Есть ли что-то еще, что я должен использовать?   -  person user2157629    schedule 14.03.2013


Ответы (2)


Нет проблем с UISCrollView в UICollectionViewCell. Используйте StoryBoard, и вы прокрутите OK. UIScrollView перекрывает UICollectionViewCell, так что didSelect работает только при касании снаружи ScrollView и внутри Cell (scrollView.frame ‹ cell.frame).

Если вы хотите реализовать касание или другой жест, просто добавьте его в UIScrollView в awakeFromNib.

См. код:

https://github.com/lequysang/github_zip/blob/master/CollectionViewWithCellScrollViewStoryBoard.zip

person LE SANG    schedule 14.03.2013

Я исправил это в своем коде, убедившись, что изменение размера прокрутки происходит в основном потоке.

В моем представлении коллекции используется nsfetchedresultscontroller, который использует блочные вызовы для обновления выбранных ячеек. При первом выборе ячейки прокрутка не будет прокручиваться. Однако, если вы щелкнете по другой ячейке и щелкнете назад, все будет работать нормально. Первоначальная загрузка ячейки выглядела так, как будто size calc может быть не там, где он должен быть в основном потоке, чтобы повлиять на поведение.

-(UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell =  [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomCell" forIndexPath:indexPath];
    dispatch_async(dispatch_get_main_queue(), ^{
        // resizeScrollViewMethod should be where scrollview content size > scroll view frame.
        [cell resizeScrollViewMethod];
    });
    return cell;
}

- (void) resizeScrollViewMethod {
    //Do your scrollview size calculation here
}
person Scott Jenkins    schedule 17.04.2014