UICollectionView - 如果选择了单元格,则不调用 didDeselectItemAtIndexPath [英] UICollectionView - didDeselectItemAtIndexPath not called if cell is selected

查看:13
本文介绍了UICollectionView - 如果选择了单元格,则不调用 didDeselectItemAtIndexPath的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要做的第一件事是设置选中的单元格.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆