Swift Call Особая функция из другого класса для Present ViewController - PullRequest
0 голосов
/ 02 июля 2019

Мой сценарий, я пытаюсь вызвать конкретную функцию файла класса 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 голосов
/ 02 июля 2019

Используйте протокол делегирования swift для вызова функции в классе из другого класса. Вот ссылка для понимания работы протокола делегата.

https://medium.com/@nimjea/delegation-pattern-in-swift-4-2-f6aca61f4bf5

0 голосов
/ 02 июля 2019

Вот как вы можете продолжить.Это всего лишь пример.Вы можете взять идею и внедрить в свой код в соответствии с вашими требованиями.

Вместо создания отдельного 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...
}
0 голосов
/ 02 июля 2019

Попробуйте это

Viewcontroller().FuncName()

Пример:

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