Как передать параметры при закрытии страницы в swift5? - PullRequest
2 голосов
/ 04 октября 2019

Я сейчас работаю над Swift5. У меня есть вопрос. В настоящее время есть запуск WebView и настраиваемое окно уведомлений для проверки данных. Я закрываю окно уведомлений после проверки данных.

Как переслать данные на страницу WebView, когда я здесь закрываю окно уведомлений? Я не думаю, что это хороший способ обновить страницу WebView. Есть ли другой способ?

WebView.swift Открыть модальное настраиваемое оповещение

      let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let myAlert = storyboard.instantiateViewController(withIdentifier: "CheckAlertController") as! CheckAlertController
        myAlert.modalPresentationStyle = .overCurrentContext
        myAlert.modalTransitionStyle = .crossDissolve
        self.present(myAlert, animated: false, completion: nil)

Модальное настраиваемое оповещение.swift

    @IBAction func okButton(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }

Я хочу доставить данные, когда нажимаю кнопку ОК и закрываю окно уведомлений модального типа.

Как решить проблему?

Есть ли другой способ? Какой правильный метод?

Например, я получаю данные, которые вводю в текстовое поле на панели «Пользовательские оповещения»

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

Добавьте этот код в верхней части вашего контроллера Modal View

protocol CheckAlertControllerDelegate: class {
    func handleData(_ data: String) // String for example
}

Добавьте этот код в любом месте вашего контроллера Modal View

weak var delegate: CheckAlertControllerDelegate?

Измените кнопку ОК

@IBAction func okButton(_ sender: Any) {
    self.dismiss(animated: true, completion: {
        delegate?.handleData("Your data here")
    })
}

На вашей веб-странице, прежде чем открыть модальное, добавьте эту строку

myAlert.delegate = self
self.present(myAlert, animated: false, completion: nil)

И добавьте это на свою веб-страницу vc

extension YourWebPageViewController: CheckAlertControllerDelegate {
    func handleData(_ data: String) {

    }
}
2 голосов
/ 04 октября 2019

Модальные пользовательские оповещения.swift

var callBack: (()->())?

@IBAction func okButton(_ sender: Any) {
    callBack?()
    self.dismiss(animated: true, completion: nil)
}

WebView.swift

 let storyboard = UIStoryboard(name: "Main", bundle: nil)
 let myAlert = storyboard.instantiateViewController(withIdentifier: "CheckAlertController") as! CheckAlertController
 myAlert.callBack = {
  // Execute your code
 }
 myAlert.modalPresentationStyle = .overCurrentContext
 myAlert.modalTransitionStyle = .crossDissolve
 self.present(myAlert, animated: false, completion: nil)
1 голос
/ 04 октября 2019

Этот ответ почти такой же, как и у @Jaydeep, просто чтобы уточнить @hongdevelop более подробно

Модальный пользовательский Alert.swift

var callBack: ((_ dataToPass: String)->())?

@IBAction func okButton(_ sender: Any) {
    //1 step: you will pass you string throw the closure, so you will catch it in your WebView 
    callBack?(textToPass) 
    // 2 step: closing the window as a later event will not interrupt passing data above
    self.dismiss(animated: true, completion: nil)
}

WebView.swift

...
let myAlert = storyboard.instantiateViewController(withIdentifier: "CheckAlertController") as! CheckAlertController


// defining a closure to catch a callback 
myAlert.callBack = { dataToPass in // define dataToPass in closure`s capture list
  // Handle your code
}
...
...