Как загрузить UIViewController из класса, который не наследует UIviewController (из файла swift с классом)? - PullRequest
1 голос
/ 24 октября 2019

Я работаю над созданием фреймворка для виджета. У меня есть два файла следующим образом: widgetBuilder.swift и webWidget.swift

widgetBuilder.swift - это файл с геттерами и сеттерами, который принимает определенные значения из приложения, которое будет использовать эту платформу виджетов.

Код из 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 
    }
}

После завершения инициализации я бы вызвал функцию сборки, я хотел загрузить ViewController из webWidget.swift

Код из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 и передать некоторые данные?

1 Ответ

0 голосов
/ 24 октября 2019

В webWidget.swift замените ваш метод loadWidgetScreen() на

public func loadWidgetScreen() {
  if var topController = UIApplication.sharedApplication().keyWindow?.rootViewController {
      while let presentedViewController = topController.presentedViewController {
          topController = presentedViewController
      }

      // topController should now be your topmost view controller
      let storyboard = UIStoryboard(name: "Main", bundle: nil)
      let controller = storyboard.instantiateViewController(withIdentifier: "WidgetController") 
      self.present(controller, animated: true, completion: nil)
  }
  else {
    print("topViewController not found")
  }
}
...