Выбор невозможен, когда UICollectionView вложен в UITableVIew
У меня есть UITableView
, где каждая ячейка содержит UICollectionView
.
Я могу прокручивать UITableView
по вертикали и прокручивать вложенные UICollectionView
по горизонтали, однако я не могу выбрать UICollectionViewCell
в UICollectionView
.
Выбор отключен в UITableView
и включен (состояние по умолчанию) в UICcollectionView
.
UICollectionView's
collectionView:didSelectItemAtIndexPath:
просто не вызывается.
Ответы
Ответ 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 и регистрировать их вызовы, чтобы увидеть, как работает
Я только что реализовал небольшой пример проекта, прежде чем я написал этот ответ, чтобы убедиться, что проблем нет. я могу загрузить его, если он все еще не работает для вас!
Удачи!