我尝试创建一个 UICollectionView
谁应该在特定的单元格中打开。
我的方法是存储所有单元格:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) ->
UICollectionViewCell {
// my code
cells.append(cell)
return cell
}
然后在
viewDidAppear
中找到所需的单元格:let result:[MyCell] = cells.filter{ $0.myProperty!.uuid == selectedUUID }
不幸的是,在单元格数组中找不到所需的单元格,因为尚未存储所有单元格。
我是朝着正确的方向前进还是需要不同的解决方案?
编辑:删除误导性信息
最佳答案
不要使用细胞本身。
您的单元格正在显示数据,对吗?他们一定。该数据(可以是数字、文本或图像,任何东西)应该是一个自定义对象。
例如,您正在显示动物列表。
所以你有 Animal
类,具有不同的属性( Size
, weight
, age
)。再一次,都是一个例子。也许您正在显示具有名字、姓氏等的学生列表。假设我们正在使用 Animal
.
你有一个 Animal 对象数组,你可以有 1 个,或 4 个,或 234234,没关系。该阵列可以容纳任意数量的动物。但是你只有一个数组。
您的 Collection View (或表格 View )需要为每一行创建一个单元格。几排?!很简单,其他方法告诉我们每个部分有特定的行数。假设我们只有一个部分。
你如何定义行?你给他一个号码。什么号码?数组中的动物数量。例如,5。或者,更好的是,myAnimalsArray.Count
.现在如果你有 20 只动物,你就会有 20 个细胞。如果你有 3 只动物,你将有 3 个细胞。
好的,现在到单元格,你知道你有多少,因此 cellForRow 将创建 X 个单元格,X 是你的数组的计数。
你可能会有一个简单的单元进行测试,比如
cell.title = animal.name
然后返回单元格。这里都是伪代码,但你明白了。
现在回答您的实际问题
我写了所有这些,因为根据您在其他答案中的其他评论,您似乎很困惑。
你有你的动物数组(数据),但还没有细胞。例如,您想从名字以 E 开头的动物开始。好吧,在阵列上所有动物之后,您需要找到以 E 开头的动物(或您可能喜欢的任何其他过滤器)。您可以通过搜索方法找到它。完成后,您将知道数组中动物的索引。这是数组项目编号 23,它是大象。
创建
NSIndexPath
具有第 0 节和索引 23 的对象(因为您的过滤器发现它是第 23 项,我只是在使用示例),然后将该 indexPath 对象传递给 scroll method of the collectionview .你很好;)
在
ViewDidLayoutSubviews
中执行此操作或 viewDidAppear
. (第一个更好)。但是您必须在加载动物数组后执行此操作,否则您将没有任何数据要过滤。一旦你调用了上面链接中的方法,你的collectionview就会滚动,如果你做得够快,它将在那个索引处加载,而不是在索引0处加载。
关于ios - UICollectionView 滚动到特定单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34765873/