質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

725閲覧

ダイアログの計算問題後の画面遷移

satoshi2019

総合スコア13

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/10/10 14:59

よろしくお願いします。
下記のようにボタンをタップしてダイアログに表示される計算問題に正解したのち画面遷移しようと考えています。しかし、現在は計算問題に正解しても正解しなくても画面遷移してしまいます。

イメージ説明

swift

1 2 var correct = 0 3 let a = Int.random(in: 1...20) 4 let b = Int.random(in: 1...20) 5 6 @IBOutlet var test: UIButton! 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 } 12 13 @IBAction func test(_ sender: Any) { 14 15 _ = "(a) + (b) = ?" 16 let alert = UIAlertController(title: "あなたは大人ですか?", message: "(a) + (b) = ?", preferredStyle: .alert) 17 18 19 alert.addTextField(configurationHandler: { textField in 20 21 textField.placeholder = "答えを入力してください。" 22 }) 23 24 alert.addAction(UIAlertAction(title: "解答する", style: .default) { _ in 25 if let textField = alert.textFields?.first { 26 if let answer = textField.text { 27 } 28 guard let answer = Int(textField.text!) else { 29 return 30 } 31 32 if answer == self.correct { 33 } 34 self.presentingViewController?.presentingViewController?.dismiss(animated: true) 35 } 36 }) 37 38 let cancel = UIAlertAction(title: "キャンセル", style: .cancel, handler: { (action) -> Void in 39 print("Cancel button tapped") 40 }) 41 42 alert.addAction(cancel); 43 44 self.present(alert, animated: true, completion: nil) 45 46 } 47} 48

どのようにすれば正誤判定ができるのか教えていただければ嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のコードで入力した回答と答えが一致している場合、画面遷移する処理を追加する必要があると思います。

Swift

1 if let textField = alert.textFields?.first { 2 if let answer = textField.text { 3 } 4 guard let answer = Int(textField.text!) else { 5 return 6 } 7 8 if answer == self.correct { 9 } 10 11self.presentingViewController?.presentingViewController?.dismiss(animated: true) 12 }

書き直すなら以下のようになるのかなと思います(これも良くはない気がしますが...)
遷移先のStoryBoardのStoryboardIDに「second」と設定すれば遷移するはずです。
SecondViewController:遷移先のViewController名

swift

1 if let answer = alert.textFields?.first?.text { 2 if answer == "(self.a + self.b)" { 3 let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "second") as! SecondViewController 4 self.present(secondViewController, animated: true, completion: nil) 5 } 6 }

Story Boardの設定方法は以下のように行います。
1.遷移先のViewControllerをクリックする
2.Storyboard IDに「second」と入力
イメージ説明

投稿2021/10/10 15:55

編集2021/10/17 02:16
-takuma

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satoshi2019

2021/10/17 01:38

ご連絡が遅くなり申し訳ございません。 ソースを変更したところ、おそらくこれでいけそうですが、問題に正解したのち、 画面遷移がうまくきません。 いろいろ試していますが、story boardからpresent modarityで繋ぐと、ダイアログが出る前に画面遷移してしまいます。
-takuma

2021/10/17 02:17

今StoryBoardの設定の仕方について回答に追記しました。 回答のやり方でまた疑問点や不明な点などありましたらご質問お願いします。
satoshi2019

2021/10/17 06:44

ありがとうございます!できました!やっと次に進めそうです。またすぐに詰まると思うのでご質問させていただくと思います。よろしくお願いいたします。
-takuma

2021/10/20 05:05

承知しました!よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問