UICollectionview SelectItem以编程方式不更改背景

时间:2014-09-08 13:05:00

标签: xamarin.ios xamarin uicollectionview mvvmcross

我有一个带图像的UICollectionView。用户可以选择(多选)图像。当用户点击单个图像时,一切正常。 SelectedBackgroundView可见,再次点击,可以看到正常图像。

但我的问题是,我有一个用户选项"全选"。在那我想要以编程方式选择所有项目。使用以下代码:

for (int i = 0; i < CollectionView.NumberOfItemsInSection(0); i++)
{
    var ip = NSIndexPath.FromItemSection(i, 0);
    CollectionView.SelectItem(ip, false, UICollectionViewScrollPosition.None);
}

以下方法返回所选项目的正确数字:

var number = CollectionView.GetIndexPathsForSelectedItems().Length;

但UI没有更改为SelectedBackgroundView。

任何人都可以帮助我吗?感谢。

1 个答案:

答案 0 :(得分:1)

调用SelectItem不会导致显示更新;它只是更改Selected的{​​{1}}属性,因此更新了集合视图中的选定索引集。

我所做的是覆盖UICollectionViewCell实施的Selected属性,并在此时调整用户界面:

UICollectionViewCell

这种方式可确保在单元格的选定状态发生变化时,在所有可能的点上更新UI,方法是通过用户交互或以编程方式调用集合视图上的public class MyCell : UICollectionViewCell { // ... public override bool Selected { get { return base.Selected; } set { base.Selected = value; // change the state of the selected background imageBackground.Image = LoadAnImage(value ? "BackgroundOn" : "BackgroundOff"); } } } SelectItem

我个人不会在单元格上使用DeselectItem属性(我大部分时间都在进行自己的分层),但您可能需要手动将该视图以类似{{1属性覆盖。