.tag 在尝试在 Swift 4 中搜索 3 个可能的值时不起作用

.tag is not working when trying to segue 3 possible values in Swift 4

我需要根据用户选择的任何 FIRE BUTTON 在视图控制器之间选择 3 个可能的值。我可以传递一个值,但我只能传递一个值。我尝试使用 .tag 来获取正确的值,但它不起作用。我想我想做什么很清楚。我现在无法传输 3 个可能的值。

let FIRE = UIButton()
let FIRE2 = UIButton()
let FIRE3 = UIButton()

override func viewDidLoad() {
    super.viewDidLoad()



    view.addSubview(FIRE)

    let image = UIImage(named: "a.png") as UIImage?
    FIRE.setImage(image, for: .normal)
    FIRE.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
    FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 200).isActive = true
    FIRE.widthAnchor.constraint(equalToConstant: 250).isActive = true
    FIRE.heightAnchor.constraint(equalToConstant: 100).isActive = true
    FIRE.translatesAutoresizingMaskIntoConstraints = false

      FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)



    view.addSubview(FIRE2)

    let image2 = UIImage(named: "b.png") as UIImage?
    FIRE2.setImage(image2, for: .normal)
    FIRE2.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
    FIRE2.topAnchor.constraint(equalTo: view.topAnchor, constant: 400).isActive = true
    FIRE2.widthAnchor.constraint(equalToConstant: 250).isActive = true
    FIRE2.heightAnchor.constraint(equalToConstant: 100).isActive = true
    FIRE2.translatesAutoresizingMaskIntoConstraints = false

    FIRE2.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)

    view.addSubview(FIRE3)

    let image3 = UIImage(named: "c.png") as UIImage?
    FIRE3.setImage(image3, for: .normal)
    FIRE3.centerXAnchor.constraint(equalTo: view.centerXAnchor, constant: 0).isActive = true
    FIRE3.topAnchor.constraint(equalTo: view.topAnchor, constant: 600).isActive = true
    FIRE3.widthAnchor.constraint(equalToConstant: 250).isActive = true
    FIRE3.heightAnchor.constraint(equalToConstant: 100).isActive = true
    FIRE3.translatesAutoresizingMaskIntoConstraints = false

    FIRE3.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)

}

@objc func handleRegisterb(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: self)
   FIRE.tag = 1
}

@objc func handleRegisterb2(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: self)
    FIRE.tag = 2
}

@objc func handleRegisterb3(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: self)
    FIRE.tag = 3
}


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


        if FIRE.tag == 1 {
            let vc = segue.destination as! ViewController
            vc.score = "a"

        }


        if FIRE.tag == 2 {
            let vc = segue.destination as! ViewController
            vc.score = "b"

        }
        if FIRE.tag == 3 {
            let vc = segue.destination as! ViewController
            vc.score = "c"

       }
    }
}

您可以在 performSegue 方法中发送所选标签作为 sender

的一部分
@objc func handleRegisterb(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: 1)
}

@objc func handleRegisterb2(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: 2)
}

@objc func handleRegisterb3(sender: UIButton){
    performSegue(withIdentifier: "beg", sender: 3)
}

然后在prepare方法中根据标签值分配score,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "beg") {
        let tag = sender as! Int
        let vc = segue.destination as! ViewController

        if tag == 1 {
            vc.score = "a"
        } else if tag == 2 {
             vc.score = "b"
        } else if tag == 3 {
             vc.score = "c"
        }
    }
}

您需要 1 个这样的操作,并将按钮的标签设置为 0,1,2

@objc func forAll(sender: UIButton){
    performSegue(withIdentifier: "beg", sender:sender.tag)
}

然后

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "beg") {
         let vc = segue.destination as! ViewController
          let arr = ["a","b","c"] 
          vc.score = arr[sender as! Int] 
    }
}

你所有的按钮都有相同的功能handleRegisterb

必须为每个按钮分配其功能(e.x。):

FIRE.addTarget(self, action:#selector(handleRegisterb), for: .allTouchEvents)
 FIRE2.addTarget(self, action:#selector(handleRegisterb2), for: .allTouchEvents)
 FIRE3.addTarget(self, action:#selector(handleRegisterb3), for: .allTouchEvents)

并且在所有函数中需要在调用performSegue(withIdentifier: "beg", sender: self)函数之前分配FIRE.tag(e.x):

@objc func handleRegisterb(sender: UIButton) {
    FIRE.tag = 1
    performSegue(withIdentifier: "beg", sender: self)
}