2016-10-10 21 views
0

私はSwiftの新機能です。このミニゲームタイプのアプリを作っています。ビューコントローラ。そのスコアをView Controllerから別の外部ポップアップView Controllerに渡したいと思います。上記View Controllerからポップアップビューコントローラ(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をポップアップビューコントローラに渡すにはどうすればいいですか?

+0

問題が解決した場合は、適切な回答を受け入れる必要があります。 – Majster

答えて

0

ストーリーボードを使用してViewControllerを開く方が効果的です。ストーリーボードで、右クリックして、ボタンから2番目のビューコントローラー(開いているもの)にドラッグします。

使用するセグの種類を選択します。あなたの場合、私は現在のModallyがうまくいくと思います。

enter image description here

あなたはストーリーボードで2 UIViewControllersの間に線が表示されます。それがセグエです。それをタップします。 Attributesインスペクタで、segueに識別子を与えます。たとえば、「myFirstSegue」です。差出人:):あなたのボタンのオーバーライドは(の準備を含んでいるのUIViewControllerのコードで次に

enter image description here

。このメソッドは、セグが発生する準備をするときに呼び出されます。あなたがボタンをタップすると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" 
     } 
    } 
} 

他ViewControllersに、こののViewControllerから行くすべてのseguesがために(準備を呼び出しますので、我々は、識別子を確認する注:送信者:)

+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にプロパティを追加し、非常に簡単だと-for例 - スコアを呼び出す:

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

@Antonio Chan興味深いhttps://github.com/raywenderlich/swift-style-guideを見つけることができるSwift Styleガイドがあります –

関連する問題