Установить условие для функции перехода - PullRequest
0 голосов
/ 19 апреля 2020

В одну кнопку я включаю как Alart System, так и всплывающее окно. Если текстовые поля не заполнены, он отправит Alart. Если все в порядке, появится всплывающее окно. Система Alart и всплывающее окно противоречивы. Как мне установить условие для перехода к функции, когда выполнять или нет?

Функция написана неправильно. Я могу понять. Но я смущен, пишу это. Как мне вызвать переопределение удовольствия c?

func stateCondition(state: Bool) {
    if state {
        print("Entered into the state") //entering into the func
        func prepare(for segue: UIStoryboardSegue, sender: Any?) {

            if segue.identifier == "info"{
                _ = segue.destination as! InfoViewController
            }
            if segue.identifier == "popUp" {
                let vc = segue.destination as! PopUpViewController
                vc.age = Double(ageTextField.text!)!
                vc.gender = genderTextField.text!
                vc.bmi = Double(bmiLabel.text!)!

                print("Entered into the segue") //is not entering into this func

            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Попробуйте прочитать код и комментарии. Сначала всего метода func prepare(for segue: UIStoryboardSegue, sender: Any?) не должно быть в другом методе. Каким-то образом вам удалось сжать его в func stateCondition(state: Bool). Второй Вы не звоните performSegue(withIdentifier: identifier, sender: self) никуда. Вы, вероятно, должны :) Проверьте код, надеюсь, это поможет. Я помню свой первый сеанс, мне потребовалось некоторое время, чтобы понять, что происходит.

class ViewController: UIViewController {

    @IBOutlet private var ageTextField: UITextField!
    @IBOutlet private var genderTextField: UITextField!
    @IBOutlet private var bmiLabel: UILabel!

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // 3
        // This method gets called and there you do your stuff with respective VCs
        if segue.identifier == "info", let infoViewController = segue.destination as? InfoViewController {
            // 3.1
            // If the identifer is set to INFO then you go to the InfoViewController and assigne message
            infoViewController.message = "Some fields are empty"

        } else if segue.identifier == "popUp", let popUpViewController = segue.destination as? PopUpViewController {
            // 3.2
            // If the identifer is set to POPUP then you go to PopUpViewController and assign age, gender and bmi
            popUpViewController.age = "33"
            popUpViewController.gender = "male"
            popUpViewController.bmi = "20"
        } else {
            print("Identifer is none of the above")
        }
    }

    @IBAction private func buttonTapped(_ sender: Any) {

        // 1.
        // First you need to figure out where you want to take the user
        // You do that in the method getSegueIdentifier() where you get the identifier
        let identifier = getSegueIdentifier()

        // 2.
        // Then you performSegue with that identifer
        performSegue(withIdentifier: identifier, sender: self)
    }

    private func getSegueIdentifier() -> String {

        if ageTextField.text?.isEmpty == true && genderTextField.text?.isEmpty == true && bmiLabel.text?.isEmpty == true {
            return "info"
        } else {
            return "popUp"
        }
    }
}

class InfoViewController: UIViewController {

    var message = ""

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        showAlert()
    }

    func showAlert() {
         // show alert with message
        print(message)
    }
}

class PopUpViewController: UIViewController {

    var age = ""
    var gender = ""
    var bmi = ""

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        showPopUp()
    }

    func showPopUp() {
        // show popUp with age gender and bmi
        print(age, gender, bmi)
    }
}
1 голос
/ 19 апреля 2020

Существует общее недопонимание: вы не должны вызывать prepare(for segue - кроме того, синтаксис в любом случае неправильный - функция вызывается платформой непосредственно перед выполнением перехода.

Вы, вероятно, имеете в виду что-то вроде

func stateCondition(state: Bool) {
    if state {
        print("Entered into the state") //entering into the func
        performSegue(withIdentifier: "info", sender: nil)
    } else {
        performSegue(withIdentifier: "popUp", sender: nil)
    }
}

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "popUp" {
        let vc = segue.destination as! PopUpViewController
        vc.age = Double(ageTextField.text!)!
        vc.gender = genderTextField.text!
        vc.bmi = Double(bmiLabel.text!)!

        print("Entered into the segue") //is not entering into this func
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...