やっていること&やりたいこと
診断アプリを作っています。
yesボタンを押すと最後の結果画面にyesを押した数を表示させたいと思っていますが、うまくいきません。
該当コード
質問画面でyesを押した時のメソッド
swift
1 @IBAction func tapYesButton(_ sender: Any) { 2 if let resultViewController = storyboard?.instantiateViewController(withIdentifier: "result") as? ResultViewController { 3 resultViewController.applicableNumber += 1 4 } 5 goNextQuestion() 6 } 7 8 9 func goNextQuestion() { 10 // 次の質問がない場合は結果画面に行く 11 guard let nextQuestion = QuestionDataMannager.shareInstance.nextQuestion() else { 12 if let resultViewController = storyboard?.instantiateViewController(identifier: "result") as? ResultViewController { 13 present(resultViewController, animated: true, completion: nil) 14 } 15 return 16 } 17 18 // 次の質問へ行く 19 if let nextQuestionViewController = storyboard?.instantiateViewController(withIdentifier: "question") as? QuestionViewController { 20 nextQuestionViewController.questionData = nextQuestion 21 present(nextQuestionViewController, animated: true, completion: nil) 22 } 23 }
結果画面のコントローラー
swift
1class ResultViewController: UIViewController { 2 3 @IBOutlet weak var applicableNumberLabel: UILabel! 4 5 var applicableNumber: Int = 0 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 applicableNumberLabel.text = "(applicableNumber)個に該当" 10 } 11}
なぜこの実装をしたか
まず質問画面のyesをタップした時に、結果画面のコントローラーであるResultViewControllerにある変数applicableNumberに1を足せば良いと考えました。
ですので、質問画面のyesを押した時のメソッドにidentifierを使ってResultViewControllerをセットしました。
そしてresultViewController.applicableNumber += 1と言う形で自己代入する形にしましたが、ちゃんと自己代入できず、0のまま表示されてしまいます。
やり方がわかる方がいらっしゃれば、ご教授願います。
上記のコードですが、具体的に次画面への遷移はどのようにして行われていますでしょうか。
ご自身でinstantiateViewController()を使ってViewControllerのインスタンスを作られたのであれば、present()で表示する必要があるのですが、その部分が上記のコードでは見当たりません。
もし、パーツからSegueを直接張ったり、あるいは別のところでperformSegueを実行しているのであれば、上記のコードではうまくいかないかもしれません。
ご回答ありがとうございます。
私の質問を編集しました。
goNextQuestionと言うメソッドで次の問題がある場合とない場合で処理を分けてみました。
回答1件
あなたの回答
tips
プレビュー