Error: Could not cast value of type 'UINavigationController'

匿名 (未验证) 提交于 2019-12-03 02:43:01

问题:

I want to present a view controller in FavouriteButtonHandler on a button press.

When I press the button, I get the following error:

Could not cast value of type 'UINavigationController' (0x11177fed8)

I searched for the cause of this error but do not know how to fix it.

View controller code follows:

import UIKit  @available(iOS 11.0, *) class FirstARViewController: UIViewController , UICollectionViewDelegate , UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {      @IBOutlet weak var collectionView: UICollectionView!     var imagescv = ["ar1","ar2" ]      override func viewDidLoad() {         super.viewDidLoad()          collectionView.delegate = self         collectionView.dataSource = self     }      func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {         return imagescv.count     }      func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {          let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! cellimagesar          cell.layer.cornerRadius = 5          cell.layer.borderWidth = 1          cell.myImages.image = UIImage(named: imagescv [indexPath.row])         cell.myImages.contentMode = .scaleToFill          cell.buttonMove.tag = indexPath.item         cell.buttonMove.addTarget(self, action: #selector(self.FavouriteButtonHandler), for: .touchUpInside)         //Declaring cell          return cell     }     func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {         return CGSize(width: 171, height: 250)     }      @objc func FavouriteButtonHandler (sender: UIButton)     {         let VcToPresent = self.storyboard?.instantiateViewController(withIdentifier: "PDFViewController") as! PDFViewController          switch sender.tag {         case 0:             //here you selected Button with tag 0              //Time to update value of Global Struct             ButtonSelected.Tag = 0              //Time to present controller that will handle your pdf file and view it          self.navigationController?.pushViewController(VcToPresent, animated: true)              break         case 1:             //here you selected Button with tag 1              //Time to update value of Global Struct             ButtonSelected.Tag = 1                     //Time to present controller that will handle your pdf file and view it         self.navigationController?.pushViewController(VcToPresent, animated: true)              break         default:             print("Error case")         }     } } 

And I get the error in this line :

 let VcToPresent = self.storyboard?.instantiateViewController(withIdentifier: "PDFViewController") as! PDFViewController 

回答1:

It's working perfectly for me :

Pushing the PDFViewController into Navigation Stack :

   if let presentVC = self.storyboard?.instantiateViewController(withIdentifier: "PDFViewController") as? PDFViewController{         self.navigationController?.pushViewController(presentVC, animated: true)     } 

OR

    if let presentVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PDFViewController") as? PDFViewController {         self.navigationController?.pushViewController(presentVC, animated: true)     } 

Please, make sure that your current viewController should belong to the top of Navigation stack before pushing anything on it.



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