我有一個集合視圖,列出了一堆視頻,並點擊其中的任何視頻都會推動包含自定義播放器視圖的導航控制器來播放視頻。點擊客戶播放器視圖上的關閉按鈕將彈出當前控制器並返回到視頻列表控制器。UICollectionView DidDeselectItemAtIndexPath方法在Swift中沒有調用
此外當點擊其中一個單元格時,該單元格將變成灰色。當從視頻列表中返回並點擊另一個單元格時,我想取消選擇之前選擇的單元格,並將其重新設置爲白色,並使新選中的單元格爲灰色。
問題是,didDeselectCellAtIndexPath方法從來沒有被調用過。之前選擇的單元格會取消選擇,我可以從所選indexPath的打印中看到它。然而,委託方法永遠不會被調用,因此backgroundColor永遠不會變回白色。它看起來像多個單元格被選中,儘管allowedMultipleSesection已被設置爲false。
以下配置設置:
let layout = UICollectionViewFlowLayout()
collectionView?.collectionViewLayout = layout
collectionView?.delegate = self
collectionView?.dataSource = self
collectionView?.allowsSelection = true
collectionView?.allowsMultipleSelection = false
這是我的CollectionView方法和委託方法:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! PreviewCell
cell.snapShotImageView.image = videoInfoArray[indexPath.item].previewImg
cell.durationLabel.text = videoInfoArray[indexPath.item].lengthText()
cell.dateLabel.text = videoInfoArray[indexPath.item].dateAddedText()
return cell
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! PreviewCell
cell.backgroundColor = UIColor.rgb(red: 240, green: 240, blue: 240)
let url = URL(fileURLWithPath: videoInfoArray[indexPath.item].path)
let vc = VideoController()
self.videoController = vc
vc.url = url
self.navigationController?.pushViewController(vc, animated: true)
}
override func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! PreviewCell
cell.backgroundColor = UIColor.white
cell.captionFileLabel.backgroundColor = .white
print("Deselect called!!! This line should be printed, but it never happens!!!!")
}
爲什麼你的委託方法有關鍵字'override'?我的意思是,你是什麼類子類?如果父類沒有實現委託方法,則任何子類都不能執行。 – zero
@zero UICollectionViewController,UICollectionViewDelegateFlowLayout,UIImagePickerControllerDelegate,UINavigationControllerDelegate,我是繼承或採用這些類或協議。當我刪除「覆蓋」時,它彈出錯誤提示我添加「覆蓋」。 –
在你的'collectionView'配置下面試試這個:'clearsSelectionOnViewWillAppear = false' – zero