错误:无法转换类型' UINavigationController'

时间:2017-12-24 03:10:12

标签: ios swift xcode swift4

我想在按下按钮时在FavouriteButtonHandler中呈现一个视图控制器。

当我按下按钮时,出现以下错误:

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

我搜索了此错误的原因,但不知道如何修复它。

查看控制器代码如下:

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")
        }
    }
}

我在这一行得到错误:

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

1 个答案:

答案 0 :(得分:0)

这对我来说很完美:

将PDFViewController推送到导航堆栈:

   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)
    }

请确保您的当前viewController在推送任何内容之前应该属于Navigation堆栈的顶部。