【问题标题】:Two "performSegue" in same class to different Viewcontrollers同一类中的两个“performSegue”到不同的视图控制器
【发布时间】:2023-04-06 03:40:01
【问题描述】:

我正在尝试使用两个不同的按钮访问两个不同的 VC。有了'newGeneratedListBtn,我只想去vc1。使用“newEmptyList”按钮,我想使用一个可以工作的布尔值转到 vc3。但是,当我单击第一个按钮 'newGeneratedListBtn' 转到 vc1 时,出现错误:“无法将 'AppName.vc1' 类型的值转换为 'AppName.vc3'。

似乎当我单击按钮到 vc1 时,它会尝试发送与我想发送到 vc3 相同的值。我该如何解决这个问题?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

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


let value = true

//Button to VC1
@IBAction func newGeneratedListBtn(_ sender: UIButton) {
    performSegue(withIdentifier: "unwindSegueToVC1", sender: self)
}

//Value to send to VC2
override func prepare (for segue: UIStoryboardSegue, sender: Any!) {

        let vc = segue.destination as! ListView
        vc.newEmptyListValue = value
}

//Button to VC2
@IBAction func newEmptyList(_ sender: UIButton) {

    performSegue(withIdentifier: "valueSender2", sender: self)
}

}

【问题讨论】:

    标签: swift button uiviewcontroller uistoryboardsegue


    【解决方案1】:

    您需要转换为特定标识符

    override func prepare (for segue: UIStoryboardSegue, sender: Any!) {
        super.prepare(for:segue,sender:sender)
        if segue.identifier == "valueSender2" {
           let vc = segue.destination as! ListView
           vc.newEmptyListValue = value 
        }
        else {
           // it's unwindSegueToVC1
        }
    }
    

    两者兼而有之

    performSegue(withIdentifier: "unwindSegueToVC1", sender: self) 
    performSegue(withIdentifier: "valueSender2", sender: self)
    

    致电prepare

    【讨论】:

    • 谢谢,但是我应该在 seque 和 sender 中插入什么? "super.prepare(segue: ,sender: )"
    • 没有照原样复制它,这与您当前的问题无关
    【解决方案2】:

    问题是prepare(for:sender:)只有一个实现,像这样:

    override func prepare (for segue: UIStoryboardSegue, sender: Any!) {
    
            let vc = segue.destination as! ListView
            vc.newEmptyListValue = value
    }
    

    两个 你的 segues 都通过这一种方法。您必须使用开关或其他条件来确定哪个这是segue,并发送适合该segue的信息。

    【讨论】:

    • 顺便说一句,我认为这是整个故事板架构中的一个巨大缺陷。您的prepare 成为该视图控制器的每一个segue 的巨大瓶颈。真是疯了。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2014-01-08
    • 2020-10-04
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2018-01-04
    相关资源
    最近更新 更多