我的场景,我正在尝试从另一个类文件调用ViewController类文件的特定函数。在这里,我处于警告之下,ViewController
不在场。
ViewControllerA下的我的代码
func previewview(){ // Inside ViewControllerA
DispatchQueue.main.async {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let fileViewController = storyboard.instantiateViewController(withIdentifier: "fileviewcontroller")
let navController = UINavigationController(rootViewController: fileViewController)
self.present(navController, animated: true, completion: nil)
} }
下面的代码在另一个类文件中
import UIKit
class FileController {
//MARK:- Call a file preview
ViewControllerA().self.previewview()
}
警告:尝试在 其视图不在窗口中 等级!
答案 0 :(得分:0)
尝试一下
Viewcontroller().FuncName()
示例:
LoginViewController().checkLoginValidation()
答案 1 :(得分:0)
使用swift的委托协议从不同的类调用一个类中的函数。 这是用于了解委托协议如何工作的链接。
https://medium.com/@nimjea/delegation-pattern-in-swift-4-2-f6aca61f4bf5
答案 2 :(得分:0)
这是您可以继续进行的方法。这只是一个例子。您可以根据需要接受想法并在代码中实现。
创建ViewController
而不是创建单独的ViewModel
,来处理实现保存文件(即
class SaveOptionsViewModel {
func save(file: String, handler: (()->())?) { //add parameters to save a file as per requirement
//save the file here...
handler?()
}
}
现在,在包含多个保存选项的controller
中,创建类型为SaveOptionsViewModel
的属性。
点击PreviewVC
后使用SaveOptionsVC
保存文件后,将handler
中的SaveOptionsViewModel
放到saveButton
中。
class SaveOptionsVC: UIViewController {
let viewModel = SaveOptionsViewModel()
@IBAction func onTapSaveButton(_ sender: UIButton) {
self.viewModel.save(file: "") {
if let previewVC = self.storyboard?.instantiateViewController(withIdentifier: "PreviewVC") {
self.present(previewVC, animated: true, completion: nil)
}
}
}
}
根据您的要求添加PreviewVC
的自定义实现。
class PreviewVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
//add the code...
}