问题
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