【问题标题】:SWIFT: Navigate to UIViewControllers from single function with a variableSWIFT:使用变量从单个函数导航到 UIViewControllers
【发布时间】:2020-06-12 10:51:17
【问题描述】:

我正在尝试为我的导航创建一个功能,而不必一遍又一遍地键入完全相同的行。

尝试这样做会导致错误:“使用未声明的类型'viewController'”

我这样做完全错了吗,我应该将这 4 行放在每个按钮上,只是使用不同的标识符和 viewController 吗?

func navigateTo(identifier:String, viewController:UIViewController) {
   let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! viewController
   newVC.modalPresentationStyle = .fullScreen
   newVC.modalTransitionStyle = .flipHorizontal
   self.present(newVC, animated: true, completion: nil)
}

@IBAction func btnOneTapped(_ sender: Any) {
   navigateTo("myVC", MyViewController)
}

【问题讨论】:

    标签: ios swift navigation


    【解决方案1】:

    确保您提供正确的标识符...以下代码完美运行。

    您的错误 -> 尝试这样做会导致错误:“使用未声明的类型 'viewController'”

    这里ViewController 有一个拼写错误,即你正在尝试这个 - viewController

    也总是尝试使用Optional-Binding 而不是force-unwarpping 这可能会导致您的应用崩溃。

     func navigateTo(identifier:String, viewController:UIViewController) {
            if let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) {
                newVC.modalPresentationStyle = .fullScreen
                newVC.modalTransitionStyle = .flipHorizontal
                self.present(newVC, animated: true, completion: nil)
            }
        }
    
        @IBAction func confirmBtn(_ sender: UIButton) {
    
            navigateTo(identifier: "myVC", viewController: MyViewController())
    
        }
    

    【讨论】:

      【解决方案2】:

      您正在传递UIViewController 的实例并尝试在下一行将 UIViewController 转换为它。修改你的函数以接受ViewController.Type 作为参数,如下所示:

      func navigateTo<ViewController: UIViewController>(identifier: String, viewController: ViewController.Type) {
          let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! ViewController
          newVC.modalPresentationStyle = .fullScreen
          newVC.modalTransitionStyle = .flipHorizontal
          self.present(newVC, animated: true, completion: nil)
      }
      
      @IBAction func btnOneTapped(_ sender: Any) {
          navigateTo(identifier: "myVC", viewController: MyViewController.self)
      }
      

      【讨论】:

      • 酷,谢谢。这两个答案都给了我更多的内心。作为一名学习编码的摄像师,所有帮助都是受欢迎的。感谢大家花费时间和精力帮助我。
      • 哦,酷,就像任何其他工作一样,您在练习并不断提出问题并进行更多研究时会擅长此操作。一切顺利。
      • 糟糕,刚刚注意到我的错字,意味着洞察力不在内部;-)
      【解决方案3】:

      谢谢大家,我的工作是这样的:

      func navigateToVC(identifier:String, viewController:ViewController.Type) {
         let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! ViewController
         newVC.modalPresentationStyle = .fullScreen
         newVC.modalTransitionStyle = .flipHorizontal
         self.present(newVC, animated: true, completion: nil)
      }
      
      @IBAction func btnOneTapped(_ sender:Any) {
         navigateToVC(identifier: "myVC", viewController: MyViewController.self)
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多