ios - 如何从不继承 UIviewController 的类(从带有 class 的 swift 文件)加载 UIViewController?

标签 ios swift xcode11 ios-frameworks

我正在为小部件构建框架。我有两个文件如下: widgetBuilder.swiftwebWidget.swift

widgetBuilder.swift 是包含 getter 和 setter 的文件,它从将要使用此小部件框架的应用程序中获取某些值。

代码来自 widgetBuilder.swift

import Foundation
class WidgetBuilder {

    private var userId: String!
    private var emailId: String!

    public func setuserId(userId: String) -> WidgetBuilder{
        self.userId = userId
        return self
    } 

    public func setEmailId(emailId: String) -> WidgetBuilder{
        self.emailId = emailId
        return self

    }

    public func build() -> WidgetBuilder{
        // Wanted to load the webview from here 
    }
}

初始化完成后,我将调用构建函数,我想加载 webWidget.swift

的 ViewController

代码来自 webWidget.swift

class webWidget: UIViewController, WKUIDelegate, WKNavigationDelegate  {


    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView()
        webView.uiDelegate = self
        webView.navigationDelegate = self
        view = webView
        self.loadWebView()
    }

    public func loadWebView(){
        let url = URL(string: "https://www.google.com")!
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = true
    }

    public func loadWidgetScreen() {
        //Something is not correct here  
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "WidgetController") 
        self.present(controller, animated: true, completion: nil)
    }

}

如何从 widgetBuilder.swift 加载 webWidget View 并传递一些数据?

最佳答案

这就是我解决的方法,发布它,可能对希望从 swift 文件加载 ViewController 的人有所帮助。

一旦我从我的 swift 文件中调用 build() ,它就必须加载 View ,

添加了一个 var,它从想要加载此小部件的父 View 中获取 ViewController 实例。

widgetBuilder.swift

private var clientView: UIViewController?

public init(_ viewController:UIViewController){
    self.clientView = viewController;
}

然后,

public func build(){

    // Widget() creates ViewController instance , this viewcontroller is mapped to a widget.xib file
    let controller: UIViewController = Widget() // Creating the instance of the view class
    self.clientView?.addChild(controller) // self.clientView is the ViewController instance that wants to load widget view 
    self.clientView?.view.addSubview(controller.view)
    controller.view.frame = (clientView?.view.bounds)!
    controller.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    controller.didMove(toParent: clientView)
}

关于ios - 如何从不继承 UIviewController 的类(从带有 class 的 swift 文件)加载 UIViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539003/

相关文章:

objective-c - 通过 POST 命令将音频从 ios 流式传输到 REST 服务器

ios - 无论如何,是否可以使用 React Native 向 TabBarIOS 呈现 native Controller ?

ios - 在 swift 3 中通过 map 注释呈现详细 View Controller ?

ios - NavigationLink 似乎只占用一点空间

json - Base64Encoded JSON 数据作为 swift 5 中 URLRequest 中的参数

ios - 如何在 Objective-C 中使自定义类线程安全

swift - xcschememanagement.plist 文件在 XCode 中有什么作用?我可以用 git 忽略它吗?

ios - SwiftUI 和 UIKit 与旧 API 中的 UIViewController 要求交互

swift5 - Xcode 11.0 beta 中的应用程序崩溃,代码为 4097

iphone - 通过引导访问锁定的 iOS 应用程序中的自动 OTA 更新