Can't select item in UICollectionView programmatically

最后都变了- 提交于 2020-01-03 10:17:09

问题


I'm trying to set a default item when the view is loaded this way:

override func viewDidLoad() {
   super.viewDidLoad()

   self.collectionView.delegate = self
   self.collectionView.dataSource = self
   self.collectionView.allowsSelection = true
   self.collectionView.allowsMultipleSelection = true

}

I'm trying to select an item in the viewDidAppear method:

override func viewDidAppear(_ animated: Bool) {
    DispatchQueue.main.async(execute: {
        self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: UICollectionViewScrollPosition.bottom)
    })
}

But the didSelectItemAt method is not fired like I need.

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
   //some config
}

Am I forgetting something?


回答1:


From documentation of selectItem(at:animated:scrollPosition:)

This method does not cause any selection-related delegate methods to be called.

That means you will have to call the delegate method manually.




回答2:


didSelectItemAt is not called if you call selectItem programmatically. You should call the method manually after it.

self.collectionView.selectItem(at: IndexPath(item: 0, section: 0), animated: true, scrollPosition: .bottom)
self.collectionView(self.collectionView, didSelectItemAt: IndexPath(item: 0, section: 0))



回答3:


let indexPath = IndexPath(item: 0, section: 0)
DispatchQueue.main.async {
   self.collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .left)
}

This is the solution which is working for me. Hope this will help you.




回答4:


override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

self.activityCollectionView?.scrollToItem(at: IndexPath(row: 1, section: 0), at: UICollectionViewScrollPosition.right, animated: true)

}

//viewDidAppear is the key


来源:https://stackoverflow.com/questions/45412881/cant-select-item-in-uicollectionview-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!