2016-10-10 6 views
0

Я совершенно новый с Swift, и я делаю это приложение для мини-игр, которое подсчитывает оценку и обновляет ярлык в просмотрите контроллер. Я хочу передать этот счет с контроллера представления в другой внешний контроллер pop up view, который я создал.Как передать данные с контроллера View в контроллер pop up view (swift/ios)

@IBAction func Button7Tapped(_ sender: AnyObject) 
    { 
     if Index == 13 { 
      game.score += 1 
     } else { 
      let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

      self.addChildViewController(scorepopVC) 
      scorepopVC.view.frame = self.view.frame 
      self.view.addSubview(scorepopVC.view) 
      scorepopVC.didMove(toParentViewController: self) 
     } 
     updateGame() 
    } 

Выше мой код для внешнего всплывал контроллера представления я создал, который также имеет отделенный .swift файл. Как я могу взять мой game.score и передать его в свой контроллер отображения Popup?

+0

Вы должны принять соответствующий ответ, если он решил вашу проблему. – Majster

ответ

0

Лучше использовать раскадровку, чтобы открыть ViewController. В раскадровке щелкните правой кнопкой мыши и перетащите от вас кнопку на второй контроллер представления (тот, который вы хотите открыть).

Выберите тип сегмента, который вы хотите использовать. В вашем случае, я думаю, что Present Modally будет работать нормально.

enter image description here

Вы увидите линию между двумя UIViewControllers в раскадровке. Это перерыв. Нажмите на него. В инспекторе атрибутов присваивается идентификатор segue. Например, «myFirstSegue».

enter image description here

Затем в коде UIViewController, который содержит вашу кнопку переопределения подготовки (для: отправителя :). Этот метод называется при подготовке к переходу. I.o.w, когда вы нажимаете на кнопку. У вас есть доступ к целевому UIViewController, и для этого вы можете получить доступ и установить на нем свойства.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "myFirstSegue" { 
     if let vc = segue.destination as? MyViewController { 
      //here you set your data on the destination view controller 
      vc.myString = "Hello World" 
     } 
    } 
} 

Обратите внимание, что мы проверяем идентификатор, потому что все перетекает, которые идут от этого ViewController другого ViewControllers позвонят подготовить (для: отправителя :)

+1

Вы переходите на добавление контроллера дочернего представления, как это было в его примере кода. – Majster

0

В вашем finalScoreViewController стремительной файл добавить новое свойство.

final class FinalScoreViewController: UIViewController { 
    var score: Int? 


} 

А затем просто назначьте его, когда вы его создаете.

@IBAction func Button7Tapped(_ sender: AnyObject) { 
    if Index == 13 { 
     game.score += 1 
    } else { 
     let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

     scorepopVC.score = game.score //THIS LINE 

     self.addChildViewController(scorepopVC) 
     scorepopVC.view.frame = self.view.frame 
     self.view.addSubview(scorepopVC.view) 
     scorepopVC.didMove(toParentViewController: self) 
    } 
    updateGame() 
} 
0

Это довольно просто, Просто добавьте свойство в вашем finalScoreViewController (если вы еще не сделали этого) и -для ПРИМЕР- называют его оценка:

class finalScoreViewController: UIViewController { 

    var score: String? 

    // ... 

Добавьте эту строку в Button7Tapped действия (где вы установите значение для очков finalScoreViewController в):

let scorepopVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "finalScorePop") as! finalScoreViewController 

     // add this line: 
     scorepopVC.score = "My score" 


     self.addChildViewController(scorepopVC) 
     scorepopVC.view.frame = self.view.frame 
     self.view.addSubview(scorepopVC.view) 
     scorepopVC.didMove(toParentViewController: self) 

Наконец, в finalScoreViewController:

override func viewDidLoad() { 
    super.viewDidLoad() 

    if let scr = score { 
     print(scr) 
    } 
} 

Надеюсь, что помогло.

+1

Дополнительное примечание: * Соглашения о присвоении имен *, вы должны вызывать всплывающий класс: «FinalScoreViewController» вместо «finalScoreViewController» (верхний верблюд для обозначения имен классов). –

+0

@ Антонио Чан Вот руководство по быстрому стилю, которое может найти интересное https://github.com/raywenderlich/swift-style-guide –

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