在UICollectionView中观察所选单元格的数量

时间:2014-06-29 21:08:31

标签: ios objective-c uicollectionview key-value-observing

我希望在UICollectionView中所选单元格的数量发生变化时通知KVO。当我尝试子类UICollectionView并添加新属性nSelectedCells时,我在尝试添加更新nSelectedCells的逻辑时遇到了问题。所选细胞计数可能会发生变化的位置太多:

  • 以编程方式 - 查看:deselectItemAtIndexPathselectItemAtIndexPathreloadData,...
  • 用户界面 - 控制器:didDeselectItemAtIndexPathdidSelectItemAtIndexPath
  • 更多?

跟踪此值的最佳方法是什么?最好来自UICollectionView子类。

2 个答案:

答案 0 :(得分:0)

UICollectionViewCell具有selected属性。您可以覆盖此方法的setter,因为它是保证在更改单元格的选择状态时唯一可以调用的内容。

或许使用属性对UICollectionView进行子类化,以保留所选单元格的计数器,并根据是否选择或取消选择单元格,在UICollectionViewCell中注册setSelected:子类触发的通知。

请注意,仅仅因为setSelected:被调用并不意味着选择状态已经改变。

- (void)setSelected:(BOOL)selected {
    if (super.selected != selected) {
        if (selected) {
            // cell was unselected and became selected, increase counter
        } else {
            // cell was selected and become unselected, decrease counter
        }
    }
    super.selected = selected;
}

答案 1 :(得分:0)

使用NSMutableSet跟踪选定单元格的索引路径,选择单元格时,添加其indexPath进行设置;取消选择一个单元格,从集合中删除其索引路径。

仅当用户成功选择/取消选择集合视图中的项目时,集合视图才会调用这些方法。以编程方式设置选择/取消选择时,它不会调用该方法。

@property (nonatomic) NSMutableSet *selectedCellIndexPathsSet;

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    //do some things.
    [self.selectedCellIndexPathsSet addObject:indexPath];
}

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    //do some thing.
    [self.selectedCellIndexPathsSet removeObject:indexPath];
}