【问题标题】:Nightmare on Segue street塞格街的噩梦
【发布时间】:2020-02-25 00:50:09
【问题描述】:

应用应该做什么:

1) 用户在 textField 中输入一个单词并点击相应的按钮

2) 应用程序应该转到另一个包含两个标签的场景。一个应该显示用户输入的单词,另一个标识被点击的按钮。这些数据应该通过接收 ViewController 上的属性传递。

实际作用:

1) segue 立即被调用,显然绕过了prepare(segue: sender:)

2) 两个标签都是空白的

3) 断点和print() 表示永远不会调用prepare(segue: sender:)

我检查过/尝试过的内容:

1) 根据我的print() 声明,按钮在情节提要中具有正确的标签

2) 我已将 if else 替换为 switch

3) 我很确定我已经阅读了关于 SO 的所有相关问题和答案

4) 将 prepare(segue: sender:) 中的 senderAny? 切换到 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.
    }


}

我承认我很擅长忽略显而易见的事情,但我确实花了很多时间才打扰你们。任何帮助或指导将不胜感激......

谢谢!

【问题讨论】:

  • 只为标题投票。
  • 我不得不尝试想出一些不同的东西。有很多关于类似问题的问题...... :)

标签: ios swift properties switch-statement uistoryboardsegue


【解决方案1】:

prepare(for segue 未被调用,因为签名错误。不得更改sender 参数的类型。

例如,将sender 转换为额外行中的预期类型

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

并将所有后续出现的sender 替换为button

【讨论】:

  • @vadian-- 非常感谢,先生!我在您的代码和我的代码之间看到的区别是“任何?”的使用。 vs“UIButton”,并使用“按钮”代替“发送者”。我实际上已经尝试了几次第一部分,但继续使用“发件人”。我将不得不复习几次才能理解它。再次感谢!
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2010-12-21
  • 2020-03-14
  • 2010-11-13
  • 2010-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多