从一个ViewController调用一个函数到另一个

时间:2018-05-16 17:57:58

标签: ios swift oop swift4

我有两个函数,我想在另一个ViewController中调用。我不想在另一个Viewcontroller中编写相同的代码。我尝试创建一个ViewController对象并调用这两种方法,但不断崩溃。我也试过扩展UIViewController,但没有运气。我怎么能继续谈论

import UIKit
import WebKit

class PrivacyPolicyController: UIViewController, WKUIDelegate {

    var webView: WKWebView!

    override func loadView() {
        super.loadView()
        createWebView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        loadURL(url: "https://www.apple.com")
    }

    func loadWebView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView

    }

    func loadURL(url: String) {
        guard let myURL = URL(string: url) else { return }
        let myRequest = URLRequest(url: myURL)
        webView.load(myRequest)
    }
}

我想在此loadURL

中调用loadWebViewViewController个函数

导入UIKit 导入WebKit

class TermsAndConditionsController: UIViewController{

    override func loadView() {
        super.loadView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

    }
}

执行操作的ViewController

import UIKit

class WelcomeViewController: UIViewController {

    @IBAction func termsAndConditionsTapped(_ sender: UIButton) {
        let termsAndConditions = TermsAndConditionsController()
        self.navigationController?.pushViewController(termsAndConditions, animated: true)
    }

    @IBAction func privacyPolicyTapped(_ sender: UIButton) {
        let privacyPolicy = PrivacyPolicyController()
        self.navigationController?.pushViewController(privacyPolicy, animated: true)
    }

}

2 个答案:

答案 0 :(得分:1)

正如我在评论中所写,对隐私政策和T& C使用相同的viewcontroller:

import UIKit
import WebKit

class MyWebViewController: UIViewController {

    var webView: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func loadWebView() {
        let webConfiguration = WKWebViewConfiguration()
        self.webView = WKWebView(frame: .zero, configuration: webConfiguration)
        self.view.addSubview(self.webView)
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
        webView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        webView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    }

    func loadURL(url: String) {
        guard let myURL = URL(string: url) else { return }
        let myRequest = URLRequest(url: myURL)
        if (self.webView == nil) {
            self.loadWebView()
        }
        self.webView.load(myRequest)
    }

}

然后:

import UIKit

class MakeItHappenViewController: UIViewController {

    @IBAction func termsAndConditionsTapped(_ sender: UIButton) {
        let termsAndConditions = MyWebViewController()
        self.navigationController?.pushViewController(termsAndConditions, animated: true)
        termsAndConditions.loadURL("http://someurl.com")
    }

    @IBAction func privacyPolicyTapped(_ sender: UIButton) {
        let privacyPolicy = MyWebViewController()
        self.navigationController?.pushViewController(privacyPolicy, animated: true)
        privacyPolicy.loadURL("http://someotherurl.com")
    }

}

答案 1 :(得分:0)

您可以为此创建Base类(继承UIViewController)并使两个视图控制器继承基类。这样你就可以在两个类中同时使用这两个方法,并且可以只调用它们

    Class BaseClass: UIViewController{
 var webView: WKWebView
 func loadWebView() {
      let webConfiguration = WKWebViewConfiguration()
      webView = WKWebView(frame: .zero, configuration: webConfiguration)
     webView.uiDelegate = self
}

func loadURL(url: String) {
    guard let myURL = URL(string: url) else { return }
    let myRequest = URLRequest(url: myURL)
    webView.load(myRequest)
}}

基类现在具有为Web视图创建添加和realoading url所需的所有方法。现在是视图控制器类。

Class PrivacyPolicyController: BaseClass, WKUIDelegate {func methodWhereYouwantToCallWebviewMthods(){
 self.loadWebView()
 self.loadURL()
 self.view = self.webView}}

其他类

相同
class TermsAndConditionsController: BaseClass{func methodWhereYouwantToCallWebviewMthods(){
 self.loadWebView()
 self.loadURL()
 self.view = self.webView}
override func loadView() {
    super.loadView()
}

override func viewDidLoad() {
    super.viewDidLoad()

}}