Подготовьтесь к переходу в Swift с помощью Sender

Я пытаюсь передать UIColor другому viewController через переход «show», чтобы цвет фона мог соответствовать цвету выбранной кнопки цвета. У меня есть этот фрагмент кода, который печатает тег отправителя кнопок, но он не выполняет этот переход.

Что я делаю не так? Я никогда раньше не работал с тегами отправителя, так что это может быть что-то глупое, но я не уверен.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "toQuiz" {
            if sender?.tag == 1 {

                let viewController:ViewController = segue.destinationViewController as! ViewController
                let color = UIColor.blueColor()
                viewController.passedColor = color

            } else if sender!.tag == 2 {

                let viewController:ViewController = segue.destinationViewController as! ViewController
                let color = UIColor.greenColor()
                viewController.passedColor = color

            } else if sender!.tag == 3 {

                let viewController:ViewController = segue.destinationViewController as! ViewController
                let color = UIColor.yellowColor()
                viewController.passedColor = color

            }
        }
    }

    @IBAction func athButtonTapped(sender: AnyObject) {

        let athleteQuiz = sender as! UIButton
        print("Button \(athleteQuiz.tag) was pressed!")
    }

    @IBAction func actorButtonTapped(sender: AnyObject) {

        let actorQuiz = sender as! UIButton
        print("Button \(actorQuiz.tag) was pressed!")
    }

    @IBAction func musicButtonTapped(sender: AnyObject) {

        let musicQuiz = sender as! UIButton
        print("Button \(musicQuiz.tag) was pressed!")
    }

Это макет раскадровки — все они правильно подключены, и идентификатор перехода совпадает с идентификатором в раскадровке.

введите здесь описание изображения

введите здесь описание изображения


person Trenton Tyler    schedule 24.05.2016    source источник
comment
Ваш переход правильно подключен в раскадровке? также проверьте идентификатор   -  person Shubhank    schedule 24.05.2016
comment
Привет, Шубханк, я только что добавил несколько фотографий, чтобы помочь всем, кто достаточно любезен, чтобы помочь мне!   -  person Trenton Tyler    schedule 24.05.2016
comment
Вызывается ли prepareForSegue вообще? Если нет, проверьте свою раскадровку и убедитесь, что контроллеру левого представления назначен правильный класс. Если бы вы делали прямые переходы от кнопок в Interface Builder, переход все равно происходил бы, но методы вашего класса не вызывались бы, потому что ваш класс не создается.   -  person Josh at The Nerdery    schedule 24.05.2016
comment
переходник прикреплен к кнопке? или какой-то другой взгляд?   -  person Shubhank    schedule 24.05.2016
comment
Вы должны изменить цвета в viewDidLoad(). В prepareForSegue() представления еще не готовы.   -  person Michele Dall'Agata    schedule 10.08.2018


Ответы (1)


Некоторые вещи, чтобы проверить:

  • Назначен ли ваш класс контроллеру левого представления в IB?
  • Что-то на самом деле вызывает переход? Ни одно из ваших действий с кнопками не содержит вызова performSegueWithIdentifier(_:sender:)

Кроме того, это очень опасный блок кода; вы не должны так принудительно разворачивать отправителя. Вместо этого подумайте о том, чтобы сделать что-то вроде этого:

guard let id = segue.identifier else { return } // Bail if there isn't a segue ID.
if id == "toQuiz" {
    guard let tag = (sender as? UIView)?.tag else { return } // Bail if we can't get a tag.

    // Continue examining the tag.
}
person Josh at The Nerdery    schedule 24.05.2016