2014-09-22 7 views
1

У меня 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]; 
} 
+0

Убедитесь, что вы звоните 'super' в переопределяется' setSelected: 'и' setHilighted: ' , и возвращает 'YES' из' collectionView: shouldSelectItemAtIndexPath: ' – rintaro

+0

Конечно, я делаю это. Добавьте код и видео в вопрос – wtorsi

+1

Итак, ваша проблема заключается в 'collectionView: shouldSelectItemAtIndexPath:' даже не вызывается. Используете ли вы 'UIGestureRecognizer'? – rintaro

ответ

3

A UITapGesutureRecognizer предотвращает распространяющийся сенсорное событие UIViewпо умолчанию. см the docs

Вы можете отключить эту функцию, сняв «Отменяет штрихи в представлении» в IB или после по коду:

UITapGestureRecognizer *recognizer = self.myTapGestureRecognizer; 
recognizer.cancelsTouchesInView = NO;