iOS如何从框架启动viewcontroller

ej83mcc0  于 2023-03-05  发布在  iOS
关注(0)|答案(5)|浏览(162)

我已经成功地创建了我的私有框架。它没有错误。我已经创建了一个项目,现在我想要一个简单的东西,但我没有线索。以下是我想要的
我想启动框架视图控制器。你可以认为这是整个应用程序。我想启动它的第一个视图控制器。然后应用程序流程是根据业务逻辑。我想在用户退出框架主视图控制器时退出应用程序。事实上,这是一个完整的应用程序,但我决定使它的框架,为不同的客户端,因为只有小的修改是需要为不同的客户端,但我不知道如何应该这样做。
下面是我如何尝试在我的客户端项目中启动第一个视图控制器,但它无法识别该控制器。

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

它会给我类似“***使用未声明的类型'FwViewController'***”的错误
那么我应该做些什么来启动框架的第一个视图控制器。

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

nue99wik

nue99wik1#

在您的框架中声明一个open函数,用于打开第一个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(如果需要)应该是框架的责任,而不是您的客户端应用程序。

fhg3lkii

fhg3lkii2#

使用框架包标识符

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

jyztefdp3#

试试这个:

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

sq1bmfud4#

如果一切都设置好了,那么你可能还没有导入你的框架。这是非常重要的一部分。仔细检查一下你是否已经声明了你的框架VC为公共的。然后你需要在你的方法中启动它。
我会建议看this选择的答案。你也是这样
PS:不要忘记进入评论选择的答案,因为有关于崩溃的讨论。我怀疑你面对他们,但如果你确实遇到任何崩溃,然后修复问题,使用该评论的答案

kpbpu008

kpbpu0085#

如果你不想让你的视图控制器公开/打开,并且仍然想从客户端应用程序打开它,这里是代码。
在私有框架内,公开扩展视图控制器和写入函数

public extension UIViewController {
func presentMyController() {
        let frameworkBundle = Bundle(identifier: "your framework bundle identifier")
        let storyBoard : UIStoryboard = UIStoryboard(name: "Storyboard", bundle: frameworkBundle)
        let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("idMyController") as MyController
        self.presentViewController(nextViewController, animated:true, completion:nil)
}}

在您的客户端应用程序中

func onButtonClick(){
  self.presentMyController()
 }

相关问题