ios - 如何在 if else 语句中插入覆盖函数

标签 ios swift swift3 overriding segue

我意识到使用基本逻辑我不能将覆盖函数放入 if else 语句中,因为它会覆盖所有内容。但是我仍然需要在 if else 语句中为 segue 做准备。所以我工作的代码的工作方式是,如果用户点击一个按钮两次,他们就赢得了比赛,因此转到显示分数的获胜者 View Controller 。如果他们输了,他们会转到没有分数的 View Controller 。所以我需要将覆盖函数 segue 放在 updateTimer() 中, 在 else if counter < 9.9 && level == 2部分。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let DestViewController : winViewController = segue.destination as! winViewController

    DestViewController.LebelText = labelx.text!

}

func updateTimer() {
    counter += 0.1
    labelx.text = String(format: "%.1f", counter)
    if counter > 10 && level < 2 {
        let next = self.storyboard?.instantiateViewController(withIdentifier: "loseViewController") as? loseViewController
        self.present(next!, animated: true, completion: nil)
    } else if counter < 9.9 && level == 2 {
        let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController
        self.present(nextc!, animated: true, completion: nil)
    } else {
        return
    }
}

最佳答案

为了建立上面 Jon 的评论,你甚至不应该调用 present(UIViewController:) - 它甚至不会调用 prepare(for segue:)方法。听起来您想要做的是在特定时间检查条件,并根据该条件传递一些数据以呈现在目标 View Controller 中。

如果你想使用转场,最好的办法是设置一个转场标识符:

首先,您需要创建转场。将鼠标悬停在 Storyboard 中 VC 顶部的 View Controller 图标上,然后按住 control 并拖动到目标 VC: createSegue

然后选择segue的类型

之后,您需要为 segue 设置一个唯一标识符,以便您可以区分代码中的任何其他 segue。为此,请选择 segue 本身,然后转到检查器 Pane 并在“标识符”字段中键入一个唯一名称: identifySegue

在你为你想要的两个 segues 完成之后,你可以将你的代码编辑成这样:

func updateTimer() {
    counter += 0.1
    labelx.text = String(format: "%.1f", counter)
    if counter > 10 && level < 2 {
        // Use first unique segue identifier
        self.performSegue(withIdentifier: "identityA", sender: self)
    } else if counter < 9.9 && level == 2 {
        // Use second unique identifier
        self.performSegue(withIdentifier: "identityB", sender: self)
    }
}

现在您可以在 prepare(for segue:) 中添加特殊代码,并且您可以使用您在 Interface Builder 中指定的唯一标识符来区分并为不同的目标 VC 添加特殊代码

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "identityA" {

        let destinationA: winViewController = segue.destination as! winViewController
        destinationA.LebelText = labelx.text

    } else if segue.identifier == "identityB" {

        let destinationB: loseViewController = segue.destination as! loseViewController
        destinationB.LebelText = labelx.text

    }
}

关于ios - 如何在 if else 语句中插入覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527170/

相关文章:

ios - 如何检查持久存储?

ios - 在 Swift 的弹出 datePickerView 中添加完成按钮?

ios - 滑动以编辑详细信息 Swift 和 Parse

ios - 数组追加会覆盖 Realm 对象的最后一个索引

ios - UIView 背景颜色在 View Controller 完成加载时发生变化

ios - 如何永久修复 Xcode 5 SpringBoard 无法启动应用程序,错误为 : -3

iphone - iOS5 BAD_EXCESS 仅在设备上

ios - 如何从应用程序中删除 ios Today 扩展

ios - 从特定的 UIViewController 识别 applicationDidBecomeActive

iOS 功能和按钮