【问题标题】:Is it possible to have 2 times prepare for segue for 2 different view controllers?是否可以为 2 个不同的视图控制器准备 2 次 segue?
【发布时间】:2016-09-24 15:45:27
【问题描述】:

我是 swift 初学者,我正在为我的第一个应用程序而苦苦挣扎。对不起,如果我的问题太基本了,但我在代码中收到一条错误消息:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    let secVC: NavigationViewController = segue.destinationViewController as! NavigationViewController // here is the error
    secVC.receiveImeNaSladkarnica = Label1.text!
    secVC.KordaA = Shirina.text!
    secVC.KordaB = Duljina.text!
    secVC.PodImeNaObekt = Label2.text!

我创建了 2 个不同的按钮:导航我和更多信息按钮。

第一个(Navi Me)与另一个名为 NavigationViewContorller 的视图控制器连接,在那里我使用 prepare for segue 发送我需要的所有数据。一切都很完美,但现在我创建了另一个名为 (MoreInfo) 的按钮。它与名为 MoreInfoViewController 的第三个视图控制器连接。我想我已经很好地连接了一切,但是当我单击 MoreInfo 按钮时,应用程序仍然停止工作,并且我收到以下错误:线程 1:标记行中的信号 SIGBART。我不明白为什么当这个 segue 用于另一个视图控制器时它会中断,而不是用于 MoreInfoViewController。请您建议我该怎么做或提供一个如何解决它的示例

我试过了:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    switch segue.identifier {
 //error here->       case "VC1" :
        let secVC: NavigationViewController = segue.destinationViewController as! NavigationViewController
        secVC.receiveImeNaSladkarnica = Label1.text!
        secVC.KordaA = Shirina.text!
        secVC.KordaB = Duljina.text!
        secVC.PodImeNaObekt = Label2.text!

  //error here ->       case "VC2" :
        let secVC2: MoreInfoViewController = segue.destinationViewController as! MoreInfoViewController
        secVC2.receiveImeNaSladkarnica = Label1.text!
        secVC2.KordaA = Shirina.text!
        secVC2.KordaB = Duljina.text!
        secVC2.PodImeNaObekt = Label2.text!

    default:
        break

还是不行

【问题讨论】:

    标签: swift uibutton segue


    【解决方案1】:

    每个 segue 都应该有一个唯一的字符串标识符。
    对于多个视图控制器,请使用 switch 语句

    switch segue.identifier {
        case "vc1" : 
           // prepare to go to vc1
        case "vc2" : 
           // prepare to go to vc2
        default : break
    }
    

    再说一次我昨天的评论:

    既然你是 Swift 的初学者,请先学习考虑变量名以小写字母开头的命名约定。

    【讨论】:

    • 但是我还没有开始为segue做准备。我只是想看看它是否打开了 MoreInfoViewController 并且应用程序停止工作并给我这个错误。我的意思是我会这样做,但是当我单击按钮时是否可以看到空视图控制器
    • 如果从不同位置调用prepareForSegue 以转到不同的视图控制器,您必须像我建议的那样区分情况。
    • 谢谢,我马上试试
    • 我试过了,但更新代码时出现错误。错误说:字符串类型的模式不能匹配字符串类型的值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多