我有两个函数,我想在另一个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
个函数
导入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)
}
}
答案 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()
}}