2017-01-07 10 views
0

Я понимаю, что с базовой логикой я не могу поместить переопределяющую функцию в инструкцию if else, потому что она переопределит все. Тем не менее, мне все равно нужно включить инструкцию if else для подготовки к segue. Таким образом, способ, которым я работаю, работает, если пользователь дважды нажимает кнопку, они выигрывают игру и, следовательно, идут к контроллеру просмотра победителей, где отображается оценка. Если они проиграют, они идут в контроллер просмотра без оценки. Поэтому мне нужно поставить переопределить функцию segue в updateTimer(), в части else if counter < 9.9 && level == 2.Как вставить функцию переопределения в оператор if else

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let DestViewController : winViewController = segue.destination as! winViewController 

    DestViewController.LebelText = labelx.text! 

} 

func updateTimer() { 
    counter += 0.1 
    labelx.text = String(format: "%.1f", counter) 
    if counter > 10 && level < 2 { 
     let next = self.storyboard?.instantiateViewController(withIdentifier: "loseViewController") as? loseViewController 
     self.present(next!, animated: true, completion: nil) 
    } else if counter < 9.9 && level == 2 { 
     let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController 
     self.present(nextc!, animated: true, completion: nil) 
    } else { 
     return 
    } 
} 
+1

Я не совсем понимаю, о чем вы спрашиваете, но я думаю, что вы хотите определить segues в своей раскадровке, а затем в двух ветвях вашего оператора if, вызовите 'performSegueWithIdentifier (sender:)' вместо 'экземпляр'' и' present ...'. –

ответ

1

Чтобы построить от комментарий Джона выше, вы не должны даже называть present(UIViewController:) - это даже не будет вызывать метод prepare(for segue:). Похоже, что вы пытаетесь проверить состояние в определенное время и на основе этого условия передать некоторые данные для представления в контроллере представления назначения.

Если вы хотите использовать перетекает, лучшая идея состоит в том, чтобы установить идентификатор SEGUE:

Во-первых, нужно создать SEGUE. Наведите курсор мыши на значок зрения контроллера в верхней части ВК в раскадровку, а затем, удерживая контроль и перетащите ВК назначения: createSegue

Затем выберите тип Segue

После этого вам необходимо установить уникальный идентификатор для segue, чтобы вы могли различать любые другие сегменты кода. Чтобы сделать это, выберите саму SEGUE, а затем перейти к панели инспектора и введите уникальное имя в поле «Идентификатор»: identifySegue

После того, как вы сделали, что для обоих перетекает вы хотите, вы можете изменить ваш код что-то вроде этого:

func updateTimer() { 
    counter += 0.1 
    labelx.text = String(format: "%.1f", counter) 
    if counter > 10 && level < 2 { 
     // Use first unique segue identifier 
     self.performSegue(withIdentifier: "identityA", sender: self) 
    } else if counter < 9.9 && level == 2 { 
     // Use second unique identifier 
     self.performSegue(withIdentifier: "identityB", sender: self) 
    } 
} 

Теперь вы можете добавить специальный код внутри prepare(for segue:), и вы можете использовать уникальные идентификаторы, которые вы указали в Interface Builder дифференцировать и добавить специальный код для различного назначения ВК

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

     let destinationA: winViewController = segue.destination as! winViewController 
     destinationA.LebelText = labelx.text 

    } else if segue.identifier == "identityB" { 

     let destinationB: loseViewController = segue.destination as! loseViewController 
     destinationB.LebelText = labelx.text 

    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^