Вызов функции из одного ViewController в другой - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две функции, которые я хотел бы вызвать в другой 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 и loadWebView функции в этом ViewController

import UIKit import 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 голосов
/ 16 мая 2018

Как я написал в комментарии, используйте один и тот же viewcontroller для Политики конфиденциальности и T & C:

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

}
0 голосов
/ 16 мая 2018

Для этого вы можете создать базовый класс (который наследует 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)
}}

Базовый класс теперь имеет все необходимые методы для создания добавляемого и изменяемого 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()

}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...