У меня UICollectionView
странное поведение, когда пользователь нажимает на UICollectionViewCell
.IOS UICollectionView Выборочный выпуск
В моем предположении, в соответствии с яблочными документами, когда пользователь нажимает на UICollectionViewCell
, ячейка должна быть подсвечена, а затем выбрана.
Но в моем приложении, когда пользователь нажимает на ячейку, он становится только выделенным, а не выбранным.
И когда пользователь щелкает по ячейке, и только в этом случае выбирается ячейка.
Любая помощь, пожалуйста. Используется Xcode 6.
Я использую UICollectionView из окна с пользовательским классом UICollectionViewCell, который переопределяет setSelected
и setHighlighted
. Я реализовал эти методы
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
но только для проверки.
UPD:
Я захватил видео http://take.ms/LzBkZ.
обеспечивает также код:
**UICollectionViewController**
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"should");
return YES;
}
- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"highlighted");
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"select %@", indexPath);
_selectedCategory = _source[(NSUInteger) indexPath.row];
// _selectedNumber = [NSNumber numberWithInteger:category.id];
}
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"deselect %@", indexPath);
if (_selectedCategory) {
_selectedCategory = nil;
}
}
И
**SSCustomViewCell**
- (void)setSelected:(BOOL)selected
{
[super setSelected:selected];
self.alpha = (CGFloat) (selected ? 0.4 : 1);
[self setNeedsDisplay];
}
- (void)setHighlighted:(BOOL)highlighted
{
[super setHighlighted:highlighted];
self.alpha = (CGFloat) (highlighted ? 0.5 : 1);
[self setNeedsDisplay];
}
Убедитесь, что вы звоните 'super' в переопределяется' setSelected: 'и' setHilighted: ' , и возвращает 'YES' из' collectionView: shouldSelectItemAtIndexPath: ' – rintaro
Конечно, я делаю это. Добавьте код и видео в вопрос – wtorsi
Итак, ваша проблема заключается в 'collectionView: shouldSelectItemAtIndexPath:' даже не вызывается. Используете ли вы 'UIGestureRecognizer'? – rintaro