Передача данных с помощью многоразовой всплывающей функции VC - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь передать данные из всплывающего VC в родительский VC, используя повторно используемую функцию, чтобы представить всплывающее окно и получить результат. Я пытался использовать метод закрытия с переменной функции во всплывающем окне, я получаю сообщение об ошибке «UIViewController не имеет члена« onSave »(переменная функции). Любая помощь будет оценена. Thx

Я использовал делегаты и сегменты, но хотел бы избежать, чтобы во всплывающем окне была возможность отображать одну функцию и собирать варианты для многих экземпляров.

// Parent VC
class a2ExpenseAddViewController: UIViewController {
@IBAction func selectEtype(_ sender: Any) {
    popTitle = "Expense Types"//global var
    popMessage = "Select type below or add new" // global var
    menuPopup(choices: eTypes){ result in guard let result = else{
        return
        }
        self.eType.setTitle(result, for: .normal)        
    print("popChoice=",result)
    }
}

extension UIViewController { 

func menuPopup (choices: [String], completion: @escaping (_   choice: String?)  -> ()) {
let main = UIStoryboard(name: "Main", bundle: nil)
let goto = main.instantiateViewController(withIdentifier: "popup")
popChoices = choices
// Error below here - UIViewController has no member 'onSave'
goto.onSave = { (data: String) -> () in 
choice = data
}
self.present(goto, animated: true, completion: nil)
}

//Popup VC
PopupViewController: UIViewController,.. // storyboard id is 'popup'
var onSave: ((_ data: String) -> ())?

@IBAction func add(_ sender: Any) {
    popChoice = choice.text!
    onSave?(popChoice)
    dismiss(animated: true)    }

Я ожидаю присвоить результат через onSave (данные) заголовку кнопки. Я получаю сообщение об ошибке "UIViewController не имеет члена" onSave "(переменная функции).

1 Ответ

0 голосов
/ 10 июня 2019

Приведите ViewController к определенному типу класса после создания экземпляра.

let goto = main.instantiateViewController(withIdentifier: "popup") as? PopupViewController

Тогда вы сможете это сделать

goto.onSave = { (data: String) -> () in 
choice = data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...