Кошмар на улице Сегу - PullRequest
       27

Кошмар на улице Сегу

3 голосов
/ 29 октября 2019

Что должно делать приложение:

1) Пользователь вводит слово в текстовое поле и нажимает соответствующую кнопку

2) Приложение должно перейти к другомусцена, содержащая две метки. Один должен отображать слово, набранное пользователем, другой идентифицирует нажатую кнопку. Эти фрагменты данных должны быть переданы через свойства на принимающем ViewController.

Что он на самом деле делает:

1) Сегмент вызывается немедленно, очевидно, в обход prepare(segue: sender:)

2) Обе метки не заполнены

3) Точки останова и print() указывают, что prepare(segue: sender:) никогда не вызывается

Что я проверял / пробовал:

1) Кнопки имеют правильные теги в раскадровке, согласно моим print() заявлениям

2) Я заменил if else на switch

3) Я почти уверен, что прочитал все связанные вопросы и ответы на SO

4) Переключен sender в prepare(segue: sender:) с Any? на UIButton и обратно

Код

import UIKit





class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }




    @IBOutlet weak var textField: UITextField!

    @IBOutlet weak var tf2: UITextField!

    @IBOutlet weak var tf3: UITextField!

    @IBOutlet weak var tf4: UITextField!




    @IBAction func sendButton(_ sender: UIButton) {
        print("sender.tag is \(sender.tag)")

        self.performSegue(withIdentifier: "mySegue", sender: sender)

        print("sender.tag is \(sender.tag)")
    }
    @IBAction func button2(_ sender: UIButton) {
        print("sender.tag is \(sender.tag)")

        self.performSegue(withIdentifier: "mySegue", sender: sender)

        print("sender.tag is \(sender.tag)")
    }
    @IBAction func button3(_ sender: UIButton) {
        print("sender.tag is \(sender.tag)")

        self.performSegue(withIdentifier: "mySegue", sender: sender)

        print("sender.tag is \(sender.tag)")
    }
    @IBAction func button4(_ sender: UIButton) {
        print("sender.tag is \(sender.tag)")

        self.performSegue(withIdentifier: "mySegue", sender: sender)

        print("sender.tag is \(sender.tag)")
    }

    func prepare(for segue: UIStoryboardSegue, sender: UIButton) {

        print("Inside prepare for segue")
        print("sender.tag is \(sender.tag)")

        if segue.identifier == "mySegue" {

            let vc = segue.destination as! SecondViewController
            print("sender.tag is \(sender.tag)")

            switch sender.tag {

            case 101:
                if (textField.text?.count)! >= 1 {
                    vc.staticText = "Button 101"
                    vc.textProp = self.textField.text!
                    print("sender.tag is \(sender.tag)")
                }

            case 102:
                if (tf2.text?.count)! >= 1 {
                    vc.staticText = "Button 102"
                    vc.textProp = self.tf2.text!
                    print("sender.tag is \(sender.tag)")
                }

            case 103:
                if (tf3.text?.count)! >= 1 {
                    vc.staticText = "Button 103"
                    vc.textProp = self.tf3.text!
                    print("sender.tag is \(sender.tag)")
                }

            case 104:
                if (tf4.text?.count)! >= 1 {
                    vc.staticText = "Button 104"
                    vc.textProp = self.tf4.text!
                    print("sender.tag is \(sender.tag)")
                }
            default:
                print("Something went wrong")
            }



//                print("In FirstVC, vc.textProp = \(vc.textProp)")
            }else{
                print("No text in textField...")
            }
        }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

Признаюсь заранее, что я довольно хорошо пропускаю очевидное, но я потратил много времени, прежде чем задавать вам, ребята. Буду очень признателен за любую помощь или направление ...

Спасибо!

1 Ответ

3 голосов
/ 29 октября 2019

prepare(for segue не вызывается, потому что подпись неверна. Вы не должны изменять тип параметра sender.

Cast sender на ожидаемый тип в дополнительной строке, например

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "mySegue",
       let button = sender as? UIButton {
       ...

, и заменять все последующие вхождения * 1009. * с button

...