Два «executeSegue» в одном классе для разных Viewcontrollers - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь перейти на два разных ВК с двумя разными кнопками.С 'newGeneratedListBtn я хочу только перейти к vc1.С помощью кнопки «newEmptyList» я хочу перейти на vc3 со значением bool, которое работает.Но когда я нажимаю первую кнопку «newGeneratedListBtn», чтобы перейти к vc1, я получаю сообщение об ошибке: «Не удалось преобразовать значение типа« AppName.vc1 »в« AppName.vc3 ».

Похоже, когда я нажимаю кнопку для vc1он пытается отправить те же значения, которые я хочу отправить на vc3. Как я могу решить эту проблему?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


let value = true

//Button to VC1
@IBAction func newGeneratedListBtn(_ sender: UIButton) {
    performSegue(withIdentifier: "unwindSegueToVC1", sender: self)
}

//Value to send to VC2
override func prepare (for segue: UIStoryboardSegue, sender: Any!) {

        let vc = segue.destination as! ListView
        vc.newEmptyListValue = value
}

//Button to VC2
@IBAction func newEmptyList(_ sender: UIButton) {

    performSegue(withIdentifier: "valueSender2", sender: self)
}

}

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Проблема в том, что существует только одна реализация prepare(for:sender:), например:

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

        let vc = segue.destination as! ListView
        vc.newEmptyListValue = value
}

Оба ваших сегментов проходят через этот один метод.Вы должны использовать переключатель или другое условие, чтобы выяснить , который указывает на это, и отправить информацию, соответствующую этому сценарию.

0 голосов
/ 29 сентября 2018

Вам необходимо разыграть конкретный идентификатор

override func prepare (for segue: UIStoryboardSegue, sender: Any!) {
    super.prepare(for:segue,sender:sender)
    if segue.identifier == "valueSender2" {
       let vc = segue.destination as! ListView
       vc.newEmptyListValue = value 
    }
    else {
       // it's unwindSegueToVC1
    }
}

как оба

performSegue(withIdentifier: "unwindSegueToVC1", sender: self) 
performSegue(withIdentifier: "valueSender2", sender: self)

с вызовом prepare

...