我試圖創建一個像這樣工作的segue。當我點擊我的第一個視圖控制器中的第一個單元格時,我將轉到第二個視圖控制器並在第二個視圖控制器中顯示我的集合視圖的第一個單元格。當我在第一個視圖控制器中點擊第二個單元格時,我將轉到第二個視圖控制器並在第二個視圖控制器中顯示我的collectionview的第二個單元格。我來了這麼遠,但它不起作用。試圖在2個不同viewController的collectionView單元格之間創建一個segue
FIRST VIEW控制器
var selectedIndexPath: NSIndexPath!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
selectedIndexPath = indexPath as NSIndexPath
performSegue(withIdentifier: "mySegue", sender: self)
print (selectedIndexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue"
{
let secondVC = segue.destination as! ViewController2
secondVC.initialDisplayCellIndexPath = selectedIndexPath
}
}
第二視圖控制器
var initialDisplayCellIndexPath: NSIndexPath!
override func viewWillAppear(_ animated: Bool) {
self.collectionView.layoutIfNeeded()
self.collectionView.scrollToItem(at: initialDisplayCellIndexPath as IndexPath, at: UICollectionViewScrollPosition.centeredHorizontally, animated: true)
}
當我運行我的應用它,只要我挖掘的一個細胞崩潰。這是錯誤消息:
<NSIndexPath: 0x600000227200> {length = 2, path = 0 - 1}
fatal error: unexpectedly found nil while unwrapping an Optional value
和錯誤是在這一行:
self.collectionView.scrollToItem(at: initialDisplayCellIndexPath as IndexPath, at: UICollectionViewScrollPosition.centeredHorizontally, animated: true)
And is initialDisplayCellIndexPath nil when you crash? –
按照我的建議去做。將initialDisplayCellIndexPath從'NSIndexPath!'類型轉換爲'NSIndexPath?'(從「implicitly unwrapped optional」轉換爲「normal」可選),然後在'viewWillAppear'方法中添加'if let'可選鏈或者一個guard語句來測試nil 。所謂 –
好吧,我改成了這樣'覆蓋FUNC viewWillAppear中(_動畫:BOOL){ 如果initialDisplayCellIndexPath =零{ self.collectionView.layoutIfNeeded() self.collectionView.scrollToItem(在:!initialDisplayCellIndexPath爲IndexPath,在:UICollectionViewScrollPosition.centeredHorizontal,animated:true) } else { }'現在我的應用程序不會崩潰。當我點擊任何單元格時,第二視圖控制器會出現,但第二視圖控制器中的collectionview不會滾動 –