UICollectionView - 如果选择了单元格,则不调用 didDeselectItemAtIndexPath [英] UICollectionView - didDeselectItemAtIndexPath not called if cell is selected
问题描述
我要做的第一件事是设置选中的单元格.
The first thing I do is to set the cell selected.
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.selected = YES;
return cell;
}
并且单元格被成功选中.如果用户触摸选定的单元格,则应取消选择该单元格并调用代表.但这永远不会发生.
And the cell is successfully selected. If the user touches the selected cell, than should the cell be deselected and the delegates be called. But this never happen.
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __PRETTY_FUNCTION__);
}
- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __PRETTY_FUNCTION__);
}
我知道如果我以编程方式设置选择,则不会调用代表.委托和数据源已设置.
I know that the delegates are not called if I set the selection programmatically. The delegate and datasource are set.
但是,这个委托被调用:
However, this delegate gets called:
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __PRETTY_FUNCTION__);
return YES;
}
如果我删除 cell.selected = YES
则一切正常.有没有人可以解释这种行为?
If I remove the cell.selected = YES
than everything is working. Is there any one who can me explain this behaviour?
推荐答案
问题是,该单元格被选中,但 UICollectionView
对此一无所知.对 UICollectionView
的额外调用解决了这个问题:
The issue is, that the cell is selected, but the UICollectionView
does not know anything about it. An extra call for the UICollectionView
solves the problem:
[collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
完整代码:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.selected = YES;
[collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
return cell;
}
我保留这个问题是为了帮助可能面临同样问题的人.
I keep the question to help someone who may face the same problem.
这篇关于UICollectionView - 如果选择了单元格,则不调用 didDeselectItemAtIndexPath的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!