条件和UIButton

时间:2018-06-20 16:05:33

标签: ios swift

我在第一个视图控制器中有两个按钮,每个按钮代表一个用户可以玩的游戏(一个宾果游戏和一个记忆游戏)。我通过segue将这两个按钮从第一个视图控制器传递到了第三个视图控制器,并在接收视图控制器(thirdVC)中创建了两个UIButton变量。

现在,我需要在第三个视图控制器中创建一个条件语句,以便当用户按下第一个视图控制器中的bingo按钮,用户选择要玩该游戏的bingo游戏或用户按下该按钮时在第一视图控制器中的“记忆游戏”按钮上,用户可以选择进入记忆游戏以玩该记忆游戏。换句话说,如果用户按下宾果游戏按钮,则对宾果游戏执行BingoSegue,或者如果用户按下记忆游戏按钮,则对记忆游戏执行memorySegue。由于IBAction按钮代码在第一个视图控制器中,因此我对如何对实际按钮进行编码感到困惑。我已经为此工作了数周,并且已经在stackoverflow中对此进行了研究,但并未成功。我以为我需要布尔。任何帮助将不胜感激!

var bingoButton = UIButton()
var memoryButton = UIButton()

var isSelected = false

override func viewDidLoad() {
    super.viewDidLoad()

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

//bingoButton:   

if isSelected {
    performSegue(withIdentifier: "bingoSegue", sender: sender)
    print("bingoSegue")

}

//memoryButton:

if isSelected {
    performSegue(withIdentifier: "memorySegue", sender: sender)
    print("memorySegue")

}
}

4 个答案:

答案 0 :(得分:1)

在情节提要中,您可以通过将控件从按钮拖到特定的目标视图控制器来添加两个不同的序列。然后,您不必在代码中手动执行检查和查询:

example

如果您必须将数据从第一个视图控制器传递到“游戏视图控制器”,则可以命名这些序列,并在第一个视图控制器的prepareForSegue函数中进行检查:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "Bingo" {
        // ...
    } else if segue.identifier == "Memory" {
        // ...
    }
}

答案 1 :(得分:0)

好,重置。 你搞砸了一点。如果您不需要将数据从第一个ViewController传递给其他VC,则可以通过不同的方法(最简单的方法)来实现您的目标:

我认为故事板是由3个视图控制器组成的。 第一个VC具有2个按钮。 您可以轻松实现此目标:

  • 擦除您在视图控制器中编写的代码(错了)
  • 在情节提要中,在bingoButton上单击鼠标右键而不释放,将光标拖动到bingo视图控制器上,释放鼠标按钮。在上下文菜单中,选择第一个选项:“显示”
  • 使用内存视图控制器上的memoryButton进行相同操作。

如果您需要将数据从第一个VC传递到游戏VC,则有多种选择,解释起来有些复杂

答案 2 :(得分:0)

我获得了有关解决方案的帮助。在这里:

创建一个新的swift文件:

import Foundation
import UIKit

enum Game {
    case bingo
    case memory
}

在第一个视图控制器中,您将为每个游戏分配每个按钮,并将它们移至第二个视图控制器:

 var gameToPlay: Game? = nil

    @IBAction func playBingoButton(_ sender: AnyObject) {

    gameToPlay = Game.bingo
    self.performSegue(withIdentifier: "GameSegue", sender: self)
    print("BingoGame")

     }

   @IBAction func playMemoryButton(_ sender: Any) {

    gameToPlay = Game.memory
    self.performSegue(withIdentifier: "GameSegue", sender: self)
    print("MemoryGame")

}

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if let secondViewController = segue.destination as? SecondViewController {
        secondViewController.gameToPlay = self.gameToPlay
    }
   }

在第二个视图控制器中,您正在将按钮传递给第三个视图控制器:

  var gameToPlay: Game? = nil

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if let thirdViewController = segue.destination as? thirdViewController {
     thirdViewController.gameToPlay = self.gameToPlay

    }
}

在第三个视图控制器中,用户选择他们想要在我的应用程序中播放的词汇。这就是为什么我有一个名为“ vocabularyButtons”的按钮并将代码放在此处的原因。当用户选择他们想玩的词汇时,用户将选择他们在第一个视图控制器中选择的游戏。

var gameToPlay: Game? = nil 

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

@IBAction func vocabularyButtons(_ sender: Any) {
    if let gameToPlay = gameToPlay {
        switch (gameToPlay){
        case .bingo:
             performSegue(withIdentifier: "BingoSegue", sender: sender)
        case .memory:
             performSegue(withIdentifier: "MemorySegue", sender: sender)
        }   
       }
      }
     }

答案 3 :(得分:-1)

根据我的知识标签可能会对您有所帮助。只需按如下所示更改viewDidLoad()。

override func viewDidLoad() {
    super.viewDidLoad()
    bingoButton.tag = 0 //Just a notation or indicator
    memoryButton.tag = 1

}

还有

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    //bingoButton:   

    if sender.tag == 0 {
        performSegue(withIdentifier: "bingoSegue", sender: sender)
        print("bingoSegue")

    }
    else if sender.tag == 1 {
        performSegue(withIdentifier: "memorySegue", sender: sender)
        print("memorySegue")

    }
   }

请尝试与我们联系。希望对您有帮助。