.tag не работает при попытке перехода на 3 возможных значения в Swift 4 - PullRequest
0 голосов
/ 25 декабря 2018

Мне нужно передать 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"

       }
    }
}

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Вам нужно одно действие, подобное этому, и установите теги для кнопок как 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] 
    }
}
0 голосов
/ 25 декабря 2018

У вас одинаковая функция на всех кнопках handleRegisterb

каждой кнопке должна быть назначена своя функция (ex):

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

и во всех функциях необходимо назначить FIRE.tag перед вызовом performSegue(withIdentifier: "beg", sender: self) функции (ex):

@objc func handleRegisterb(sender: UIButton) {
    FIRE.tag = 1
    performSegue(withIdentifier: "beg", sender: self)
}
0 голосов
/ 25 декабря 2018

Вы можете отправить выбранный тег в методе 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"
        }
    }
}
...