我有一个ViewController,它将启动另一个具有CollectionView的ViewController。
我想在首次启动时将uicollecitonView设置为指定的元素。 在之前的帖子中有人建议我使用'将集合视图的contentOffset设置为(集合视图宽度)* selectedRow'。但我无法解决这个问题。
在我的prepareForSegue函数中,我添加了:
x = Float(indexPath.row) * 375.0 // 375 is the width of 1 cell
var point = CGPointMake(CGFloat(x), 0)
println ("***x=")
println (x)
detailController.collectionView?.setContentOffset(point , animated: false)
where detailController is UICollectionViewController.
在我的集合View的UICollectionViewDataSource中,我总是看到它得到第0个元素,而不是第n个元素
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as DetailViewCell
// Configure the cell
println("DetailViewController in cellForItemAtIndexPath()")
println(indexPath.row)
cell.myitem = allItems[indexPath.row]
return cell }
我总是看到cellForItemAtIndexPath尝试获取allItems的第0个元素(这是我所有对象的整个集合。
有什么想法解决这个问题吗?
更新
感谢。我试过我得到这个例外: * 由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:'尝试滚动到无效的索引路径:{length = 1,path = 4}'
我确信我的列表中有26个项目。当我想将它滚动到第4个元素时,为什么只有1:
class MyViewCollectionViewController: UICollectionViewController {
override func viewDidAppear(animated: Bool) {
println("MyViewCollectionViewController viewDidAppear")
println("items.count")
println(items?.count) // print out 26
println(index) // print out 4
var newIndex = NSIndexPath(index: self.index)
self.collectionView?.scrollToItemAtIndexPath(newIndex, atScrollPosition: UICollectionViewScrollPosition.Left, animated: false)
}
}
答案 0 :(得分:5)
通常,集合视图使用带有节和项的索引路径。尝试在newIndex
中以这种方式创建viewDidAppear
:
let newIndex = NSIndexPath(forItem:self.index inSection:0)