【问题标题】:prepareForSegue not opening new viewprepareForSegue 没有打开新视图
【发布时间】:2015-04-24 06:16:23
【问题描述】:

我有一个被调用的视图控制器。它有一些检查,如果不满足,则不需要显示此视图控制器,并且将调用我的应用程序中的下一个视图控制器。这部分不起作用。

我有以下 IBAction:

    @IBAction func nextBtnPressed(sender: UIButton!) {
    if GlobalVars.diceRollFirst == true {
        performSegueWithIdentifier("showCombatOutcomeFromRearSupport", sender: self)
    }
    if GlobalVars.diceRollFirst == false {
        performSegueWithIdentifier("showDiceRollFromRearSupport", sender: self)
    }
}

哪个工作正常。

但是,在我的 viewDidLoad() 中,我有以下代码: 在经过多次检查后,在 viewDidLoad 中较早地设置了 backsupportfound。它最初为假,如果满足任何检查,则设置为真。

        if !rearsupportfound {
        println("rearsupportfound is: \(rearsupportfound)")

        if GlobalVars.diceRollFirst == true {
            performSegueWithIdentifier("showCombatOutcomeFromRearSupport", sender: self)
        }
        if GlobalVars.diceRollFirst == false {
            performSegueWithIdentifier("showDiceRollFromRearSupport", sender: self)
        }
    }

这段代码什么都不做。我的意思是它确实得到了这个代码:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if segue.identifier == "showCombatOutcomeFromRearSupport" {
        println("segue: showCombatOutcomeFromRearSupport sender: \(sender)")
        let vc = segue.destinationViewController as CombatOutcomeViewController
        vc.army1 = army1
        vc.army2 = army2
    }
    if segue.identifier == "showDiceRollFromRearSupport" {
        println("segue: showDiceRollFromRearSupport")
        let vc = segue.destinationViewController as DiceRollViewController
        vc.army1 = army1
        vc.army2 = army2
    }
}

我得到了 println 条目,但是请求的视图控制器永远不会出现,而当前的视图控制器是。按下按钮时,相同的 perpareForSegue 可以完美运行。

任何想法是为什么?

我意识到在我到达这里之前我可能应该检查是否呈现这个视图控制器。我试图避免两次编写代码,因为视图中显示的数据隐藏或显示的某些标签和按钮。我还没有看到解决这个问题的好方法,所以因为我已经编写了这些检查,所以我试图绕过视图控制器本身,具体取决于值。有人想吗?谢谢。

【问题讨论】:

    标签: ios swift segue uistoryboardsegue


    【解决方案1】:

    您的代码不起作用,因为您是从 viewDidLoad() 中调用它。您需要改为从viewDidAppear() 调用它 - 请参阅this question for more details

    就您的代码重复问题而言,我会尝试从您的视图控制器中删除所有游戏逻辑。拥有一个更大、更高级别的对象来维护游戏的状态,并决定哪些视图控制器适用于任何给定的时刻/场景。然后这个对象可以将适当的 segue 标识符交给视图控制器。这样视图控制器就不需要知道骰子或战斗或后方支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      相关资源
      最近更新 更多