【问题标题】:iOS how to start a viewcontroller from frameworkiOS 如何从框架启动视图控制器
【发布时间】:2018-12-26 01:37:51
【问题描述】:

我已经成功创建了我的私有框架。它没有错误。我现在创建了一个项目,我想要一个简单的东西,但我不知道。以下是我想要的

我想启动框架视图控制器。 你可以认为它是整个应用程序。我想开始它的第一个视图 控制器。然后应用程序流程按照业务逻辑。一世 当用户退出框架主视图控制器时想要退出应用程序。实际上它是一个完整的应用程序,但我决定为不同的客户端制作它的框架,因为不同的客户端只需要进行小的修改,但我不知道应该如何完成。

这是我尝试在客户端项目中启动第一个视图控制器的方式,但它无法识别该控制器。

 @IBAction func onClickBtnStartOver(_ sender: Any)
 {
     let storyBoard : UIStoryboard = UIStoryboard(name: "Storyboard", bundle:nil)            
     let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("idFrameworkVC") as FwViewController
     self.presentViewController(nextViewController, animated:true, completion:nil)
 }

它给了我类似“Use of undeclared type 'FwViewController'”之类的错误

那么我应该怎么做才能启动框架的第一个视图控制器。

注意:我在一个 Storyboard 中有视图控制器,即框架内的 Storyboard

【问题讨论】:

  • 你是否在你的框架中声明你的类是公开的/开放的?
  • 是的,我确实声明了

标签: ios iphone swift4 xcode9


【解决方案1】:

使用你的框架包标识符

 let frameworkBundle = Bundle(identifier: "your framework bundle identifier")
 let storyboard = UIStoryboard(name: "your framework storyboard name", bundle: frameworkBundle)
 let mas = storyboard.instantiateInitialViewController() as! UIViewController
 self.present(mas, animated: true, completion: nil)

【讨论】:

    【解决方案2】:

    在你的框架中声明一个打开的函数来打开第一个 viewController:

    open func presentFirstViewControllerOn(_ viewController:UIViewController) {
        let storyBoard : UIStoryboard = UIStoryboard(name: "Storyboard", bundle:nil)
        let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("idFrameworkVC") as FwViewController
        viewController.presentViewController(nextViewController, animated:true, completion:nil)
    }
    

    并从客户端应用程序的 VC 调用此方法。 决定哪个是第一个 VC(如果需要)应该是框架的责任,而不是您的客户端应用程序。

    【讨论】:

    • 你能告诉我如何从客户端应用程序更改框架故事板视图中的颜色吗?
    • 我的朋友,一个框架应该是一个可重用的组件。如果您需要不时更改颜色,我认为创建框架不是正确的事情,因为那样组件似乎不可重用
    • 也就是说,在IOS中是不能做的。而它可以在 Android 中轻松完成,只需在 colors.xml 文件中替换相同的颜色名称,然后将其替换为客户端应用程序中的颜色即可。因此无需更改应用程序的其他编码和工作
    【解决方案3】:

    试试这个:

              UIApplication.shared.keyWindow?.rootViewController =  UIStoryboard(name: "yy", bundle: nil).instantiateInitialViewController()
    

    【讨论】:

      【解决方案4】:

      如果一切都设置得很好,那么您可能还没有在其中导入您的框架。这是非常重要的部分。仔细检查您是否已将您的框架 VC 声明为 Public。 然后在它之后你需要在你的方法中启动它。

      我会建议查看this 选择的答案。你就是这种情况

      PS:不要忘记在所选答案上进入 cmets,因为有关于崩溃的讨论。我怀疑您是否面对他们,但是如果您确实遇到任何崩溃,请使用答案中的该评论解决问题

      【讨论】:

      • 虽然我没有得到完整的答案,但现在我接受了这个答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      相关资源
      最近更新 更多