多个segues到同一个视图控制器

时间:2015-03-23 19:04:39

标签: ios swift segue

我真的很喜欢编码,所以如果这很愚蠢请温柔:P。

我试图通过快速编码实现的是拥有2个视图控制器,可以根据发送segue传递数据。

VC1设置有2个标签和2个按钮。标签1是玩家1的名字,标签2是玩家2的名字。按钮1是从VC2中的全局名称列表中选择播放器1,而按钮2对于播放器2是相同的

VC2有一个选择器视图设置,其中包含一个名称列表和一个“选择”在pickerView中选择的名称的按钮。

我知道如何设置所有按钮,选择器和标签,甚至如何使用prepareForSegue发回数据,但是我不知道怎么做是告诉VC2“选择”按钮发送它to playerOneSegue或playerTwoSegue基于VC1中选择的按钮。

任何帮助将不胜感激,我很抱歉,如果这是愚蠢的,但我已经卡住了一段时间,并没有找到任何在线帮助。我甚至不确定这是不是我应该这样做的方式。我有一半想要为每个按钮设置一个警报,甚至没有跳到另一个VC,但另一部分想知道如何做到这一点,因为我确定必须有一种方法大声笑。

2 个答案:

答案 0 :(得分:7)

如果您有两个相同VC的segue,您可以为每个segue提供唯一标识符,并根据标识符区分发件人。 设置按钮的标签(例如1表示button1和2表单button2)

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
 if (segue.identifier == "firstIdentifier") {
        var VC2 : VC2 = segue.destinationViewController as VC2
        VC2.buttonTag = sender.tag

 }
 if (segue.identifier == "secondIdentifier") {
    var VC2 : VC2 = segue.destinationViewController as VC2
        VC2.buttonTag = sender.tag
 }
}

在VC2中,声明一个变量buttonTag

var buttonTag = 0

无论你在VC2中执行segue,只需检查buttonTag的值

if buttonTag == 1 {
  //segue caused by button1 of VC1
}
else
if buttonTag == 2 {
  //segue caused by button2 of VC1
}
else {
  //segue caused by something else
}

我希望这就是你想要实现的目标

答案 1 :(得分:0)

不太确定你在问什么。但听起来你想要将数据从vc1发送到vc2然后决定在vc2中运行哪个segue。

我会做什么:在vc1 prepareForSegue中,我会在vc2中设置一个属性,该属性根据vc1中的按钮说明了如何处理vc2中的结果。

在你的prepareForSegue中:

    if segue.identifier == "MyVc2Segue" {
        let yourNextViewController = (segue.destinationViewController as CommentViewController)

        // Set variable 
        yourNextViewController.myVar = somethingVar
    }

然后在你的vc2中我会使用一个插座而不是依赖于segues,并且在插座中根据上面提到的变量采取一个立场/决定你应该执行哪个segue。