如何使用Swift 3.0按钮将值从ViewController传递到另一个ViewController

时间:2016-10-28 01:02:25

标签: ios iphone swift parameter-passing viewcontroller

我使用 Swift 制作iOS应用程序,即Rock,Paper和Scissors。

当您按下哪个按钮(带有摇滚图片,纸张图片或剪刀图片)时,它将转到另一个视图控制器并显示它是一个平局,一个胜利或一个损失(比较您的数字[即。摇滚按钮是1]到计算机的随机数)。但是它不会显示结果,因为它需要在按钮中,而不是在按钮之外和viewDidLoad()中。

我会给你代码的片段。我在下一个View Controller中使用函数来返回一个字符串。

所以我需要帮助的是将userNum和computerNum传递给按钮中的下一个View Controller(按下时),然后调用该函数并返回String。

var userNum: Int = 0
var computerNum: Int = 0

@IBAction func rock(_ sender: UIButton) {
    userNum = 1
    computerNum = (Int)(arc4random_uniform(3) + 1)
} //This next code will be in the other View Controller
func chooseWinner(userNum : Int, computerNum : Int) -> String {
    if userNum == computerNum {
        return "There is a tie"
    }else if userNum == 1 && computerNum == 2{
         return "You lost!"
    }else if userNum == 1 && computerNum == 3{
         return "You won!"
    }else if userNum == 2 && computerNum == 1{
         return "You won!"
    }
    else if userNum == 2 && computerNum == 3{
         return "You lost!"
    }else if userNum == 3 && computerNum == 1{
         return "You lost!"
    }
    else if userNum == 3 && computerNum == 2{
         return "You won!"
    }else{
         return "value"
    }
}

1 个答案:

答案 0 :(得分:3)

在情节提要编辑器中,在按住左键的同时按住Ctrl,然后将鼠标拖动到要切换到的目标视图控制器。释放鼠标后,您可以选择一种segue类型,例如show

这将允许您转到目标视图控制器,而无需像编码一样以编程方式创建IBAction

在源视图控制器中,添加函数

prepare(for segue: UIStoryboardSegue, sender: Any?)

这将允许您在segueing之前检查segue并进行任何其他设置。

请记住在Attribute Inpector

中设置segue的标识符

identifier

内部源视图控制器

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


        //OtherViewController is a placeholder for the viewcontroller class of your destination viewcontroller
        if let destinationVC = segue.destinationViewController as? OtherViewController {
            destinationVC.userNum = 1
            destinationVC.computerNum = (Int)(arc4random_uniform(3) + 1)
        }
    }
}

内部目标视图控制器

var userNum: Int!
var computerNum: Int!

override func viewDidLoad() {
    super.viewDidLoad()

    //do wtv you need with your values
    print(chooseWinner(userNum: userNum, computerNum: computerNum))
}