我有一个带图像的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。
任何人都可以帮助我吗?感谢。
答案 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属性覆盖。