Подтвердить что ты не робот

Выбор невозможен, когда UICollectionView вложен в UITableVIew

У меня есть UITableView, где каждая ячейка содержит UICollectionView.

Я могу прокручивать UITableView по вертикали и прокручивать вложенные UICollectionView по горизонтали, однако я не могу выбрать UICollectionViewCell в UICollectionView.

Выбор отключен в UITableView и включен (состояние по умолчанию) в UICcollectionView.

UICollectionView's collectionView:didSelectItemAtIndexPath: просто не вызывается.

4b9b3361

Ответ 1

То, как я смог решить это, заключалось в том, чтобы добавить признак распознавания жестов в ячейку, чтобы обращаться с краном вручную, а не полагаться на didSelectRowAtIndexPath, который не вызван:

Swift

let tapRecognizer = UITapGestureRecognizer(target: self, action: "cellTapped:")
tapRecognizer.numberOfTapsRequired = 1
cell.addGestureRecognizer(tapRecognizer)

Objective-C

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)];
tapRecognizer.numberOfTapsRequired = 1;
[cell addGestureRecognizer:tapRecognizer];

Теперь вы можете обрабатывать ячейку, которая используется в методе cellTapped:, и вы можете получить ссылку на ячейку, которая была нажата через tapRecognizer.view.

Ответ 2

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

После настройки необходимых делегатов и источников данных для UITableView и вложенных UICollectionView вы можете сделать свой UICollectionView первый выбираемый вид, подобный этому

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {
    ...
    [tableViewCell bringSubviewToFront:tableViewCell.yourCollectionView];
    return cell;
}

Это сделает UICollectionView первым, что можно выбрать через делегат

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath; 

Любая другая часть представления будет выбрана с помощью делегата UITableView

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

Надеюсь, это поможет!

Ответ 3

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

более конкретно, UITableView GR для крана может препятствовать получению штрих-кода UICollectionView

Ответ 4

Сначала проверьте, что вы предоставили необходимый источник данных и делегатов. Затем, если вы используете представление коллекции по определенному количеству ячеек таблицы, вы можете напрямую вставить в ячейку прототипа. Убедитесь, что ваша ячейка имеет соответствующие пределы (ширина)

Ответ 5

Попробуйте отключить delaysContentTouches для tableView и убедитесь, что delegate для ваших представлений коллекции задано правильно.

Ответ 6

Это не должно быть проблемой вообще! никакие пользовательские распознаватели жестов не нужны. нет необходимости отключать выбор таблицы.

обязательно:

  • настройте свой табличный вид в раскадровке или коде и установите его источник данных и делегат
  • в cellforrowatindexpath после удаления класса tableviewcell получает ссылку на соответствующее собрание и устанавливает его (коллективный просмотр) источник данных и делегат
  • реализовать методы tableviews и collectionviews делегировать методы didselect и регистрировать их вызовы, чтобы увидеть, как работает

Я только что реализовал небольшой пример проекта, прежде чем я написал этот ответ, чтобы убедиться, что проблем нет. я могу загрузить его, если он все еще не работает для вас!

Удачи!