从另一个类为Present ViewController快速调用特殊函数

时间:2019-07-02 06:36:40

标签: swift

我的场景,我正在尝试从另一个类文件调用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()
}
  

警告:尝试在    其视图不在窗口中   等级!

3 个答案:

答案 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...
}