🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Xcode

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

Swift

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

Q&A

解決済

1回答

843閲覧

【swift5.0】Alertが表示されない

renren5

総合スコア12

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/10/20 09:38

#前提・実現したいこと
タイマーアプリ(slidertimerの値を取得しています)を作成しています。タイマーが完了(couterが0)したら、アラートを表示できるようにしたい。タイマーの起動、リセットは問題なくできております。

発生している問題・エラーメッセージ

アラートが表示されない(成功のアラート)。

該当のソースコード

swift

1import UIKit 2 3class HomeVC: UIViewController { 4 5 var count:Int = 0 6 var timer:Timer! 7 var userTimer:String! 8 var alert:UIAlertController! 9 10 @IBOutlet weak var minutesLabel: UILabel! 11 @IBOutlet weak var secondLabel: UILabel! 12 @IBAction func currentSliderValue(_ sender: UISlider) { 13 14 let sliderValue:Int = Int(sender.value) 15 userTimer = String(sliderValue*1) 16 //5分間隔で表示させる 17 minutesLabel.text = userTimer 18 } 19 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 24 25 26 } 27 28 override func viewDidAppear(_ animated: Bool) { 29 30 } 31 32 33 @IBAction func countDownBtn(_ sender: UIButton) { 34 count = Int(minutesLabel.text!)! * 60 35 36 if timer == nil { 37 timer = Timer.scheduledTimer(timeInterval: 1.0, target:self, selector: #selector(self.timerAction(sender:)), userInfo: nil, repeats: true) 38 sender.setTitle("ギブアップ", for: UIControl.State.normal) 39 40 }else { 41 // タイマーが動いているなら 42 if timer.isValid { 43 44 //ギブアップアラート発動 45 alert = UIAlertController(title: "ギブアップ", message: "本当に諦めますか", preferredStyle: .alert) 46 47 let giveUpAction = UIAlertAction(title: "諦める", style: .default) {action in 48 print("諦める") 49 //タイマーをリセット 50 self.minutesLabel.text = self.userTimer 51 self.secondLabel.text = "00" 52 sender.setTitle("スタート", for: UIControl.State.normal) 53 54 self.timer.invalidate() 55 56 } 57 58 let canselAction = UIAlertAction(title: "キャンセル", style: .default) {action in 59 print("キャンセル") 60 61 } 62 63 //Actionを追加 64 alert.addAction(giveUpAction) 65 alert.addAction(canselAction) 66 67 // UIAlertを発動 68 present(alert, animated: true, completion: nil) 69 } 70 //タイマーが動いていないなら 71 else{ 72 timer = Timer.scheduledTimer(timeInterval: 1.0, target:self, selector: #selector(self.timerAction(sender:)), userInfo: nil, repeats: true) 73 timer.fire() 74 75 76 } 77 78 } 79 80 81 82 } 83 //カウントダウン 84 @objc func timerAction(sender:Timer) { 85 86 if count > 0{ 87 count -= 1 88 print(count) 89 90 // %02d:分・秒を2桁表示 91 let sMinute = String(format:"%02d", count/60) 92 let sSecond = String(format:"%02d", count%60) 93 94 minutesLabel.text = sMinute 95 secondLabel.text = sSecond 96 } 97 //タイマーが終了したら 98 else if count == 0 { 99// sender.setTitle("スタート", for: UIControl.State.normal) 100 successAlert() 101 sender.invalidate() 102 103 104 } 105 } 106 107 //成功のアラート発動 108 func successAlert() { 109 alert = UIAlertController(title: "おつかれさま", message: "(userTimer!) + 円を手に入れました!", preferredStyle: .alert) 110 let okAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction) in 111 print("給与が支払われた") 112 } 113 alert.addAction(okAction) 114 115 // UIAlertを発動 116 present(alert, animated: true, completion: nil) 117 118 119// let moneyImage = UIImage(named: "money") 120// let imageView = UIImageView(frame: CGRect(x: 220, y: 10, width: 40, height: 40)) 121// imageView.image = moneyImage 122// alert.view.addSubview(imageView) 123 124 } 125 126 127 128 129}

補足情報

  • swift5.0
  • xcode11.1

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

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

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

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

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

hameji

2019/10/20 15:54

ちょっと、気合が入らずコードを追い切れませんでしたが、 printを各所に記入して、きちんと目的の場所にコードが流れているでしょうか? Alertのとこはコードの書き方に問題なかったように見えたので、 場合分けがきちんとされているかが気になります。
renren5

2019/10/21 04:15

確認ありがとうございます。 printを配置して、再度実行したところ、アラートが表示されました。 原因は不明ですが、ありがとうございます。
guest

回答1

0

自己解決

再度実行で改善された。printを配置する上で、リファクタを少々行ったので、上手く機能したのかもです。

投稿2019/10/21 04:17

renren5

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問