停止取消选择项目的集合视图

时间:2016-12-08 16:01:18

标签: ios swift uicollectionview

我有UICollectionView日历。它是一个可滚动的行。有些日期是不可选择的,因为该日期没有数据。其他可选择,因为该日期有IS数据。

当选择日期时,日历会在选定日期下划线并将其滚动到UICollectionView的中心。

当点击没有日期的日期时,我有这个功能......

override func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
    return //is there data for the date at this indexPath?
}

这会停止选择的单元格...但是,它仍会取消选择之前选择的单元格。

有一个shouldDeselect函数但我不能使用它,因为我不知道tapped cell的索引。所以我无法确定是否应该取消选择该项目。

有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

当我重新加载collectionview时,这对我来说很简单:

func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
    // return true whithout reloadData when necessarily
    collectionView.reloadData()
    return false
}

答案 1 :(得分:1)

我最近遇到了同样的问题,最后我采用了以下方法:

每当用户选择一个单元格时,请记住成员变量中的位置:

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
         myMemberVariable = indexPath.row
 }

之后致电myCollectionView.reloadData()

cellForRowAtIndexPath:应用适当的单元格配置中:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MyCell.identifier, for: indexPath) as! MyCell
    if indexPath.row == myMemberVariable && canSelectCellAt(indexPath: indexPath) {
        cell.backgroundColor = .green
    } else {
        cell.backgroundColor = .gray
    }

    return cell
}

其中canSelectCellAt(indexPath: indexPath)是一个函数,它为可选择的单元格返回true,为不可选择的单元格返回false

答案 2 :(得分:1)

我的解决方案:

collectionView.allowsMultipleSelection = true
然后在didSelect中,取消选择所有先前选择的索引路径:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    collectionView.indexPathsForSelectedItems?.filter({ $0 != indexPath }).forEach { indexPath in
        collectionView.deselectItem(at: indexPath, animated: false)
    }
}

答案 3 :(得分:1)

我的解决方案是启用多项选择

res = np.array([[]] * 11)      # or better: res = np.zeros(

arr = np.array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

np.column_stack((res, arr))

array([[-2.7532e-03,  1.1973e-06, -2.7532e-03,  1.1973e-06],
       [ 9.7603e-02,  1.9542e-06,  9.7603e-02,  1.9542e-06],
       [ 1.9770e-01,  2.0952e-06,  1.9770e-01,  2.0952e-06],
       [ 2.9758e-01,  2.1637e-06,  2.9758e-01,  2.1637e-06],
       [ 3.9787e-01,  1.4734e-06,  3.9787e-01,  1.4734e-06],
       [ 4.9795e-01,  1.3670e-06,  4.9795e-01,  1.3670e-06],
       [ 5.9790e-01,  2.0252e-06,  5.9790e-01,  2.0252e-06],
       [ 6.9817e-01,  2.1771e-06,  6.9817e-01,  2.1771e-06],
       [ 7.9837e-01,  1.2704e-06,  7.9837e-01,  1.2704e-06],
       [ 8.9822e-01,  2.1794e-06,  8.9822e-01,  2.1794e-06],
       [ 9.9847e-01,  1.4442e-06,  9.9847e-01,  1.4442e-06]])

答案 4 :(得分:0)

我刚遇到这个问题(有点晚了吗?),要解决这个问题,您只需要使用

   func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {

代替shouldSelect