問題の概要
fuzzballさんとtyobigorouさんの助言で複数のボタンをひとつのIBActionにつなげる方法は解決しましたがその手法を使って次の課題に対応しました。
カギのボタンをタップしてtextFieldに記入済みの時間をキーボードを下げて保存し、カギイメージを解錠からロックに切り替える機能を持たせました。更にボタンをタップするとアラートが出てOKをタップするとtextFieldは空になり、キーボードがせり上がり記入できるようになり、カギイメージは解錠状態になる機能を実装しました。カギボタンは14個あります。
最初のボタンの場合は仕込んだとおりの機能を示しますが、2番目のボタンの場合は、アラートが出る状況から始まります。1番のボタンをスキップして2番目・・・14番目のボタンから始めると狙った機能どおり作動します。
下記のスクリーンショット画面で示すとおりです。
原因としては下記のコードのcount = count + 1が最初のボタンを続けてタップする場合と最初のボタン→2番目のボタンをタップすることを混同していると考えられます。
状況を示すスクリーンショット
原因を内蔵すると考えられるコード
var count = 0 @IBAction func lockButtonTapped(_ sender: Any) { // ロックボタンを押した回数を1増やす count = count + 1 //略略略 _ = displayImage() guard let lockButtonTapped = sender as? UIButton else { return } //複数セルの場合のコード switch lockButtonTapped.tag { // Image Viewに読み込んだ画像をセット case 6: //最初のボタン if count % 2 == 1 { print ("ここまで来た case 6") textTimeDep01DepCell01.isUserInteractionEnabled = false imageLockDep01DepCell01.image = UIImage(named: "KagiLock") print ("ここまで来た case 6ロック") } //残りが0の場合 else if count % 2 == 0 { // アラートの実装 let alert = UIAlertController(title: "記入済みの時刻を削除します。", message: "表示のOKを押すと削除されて新規に書き込みができます。このまま保存したい場合はキャンセルを押してください", preferredStyle: .alert) let cancelAction = UIAlertAction(title: "Cancel", style: .default) let okAction = UIAlertAction(title: "OK", style: .destructive) { (action: UIAlertAction) in //OKをタップするとイメージがオープンになり、textFieldが空になりキーボードが現れインプット可能になる self.imageLockDep01DepCell01.image = UIImage(named: "KagiOpen") self.textTimeDep01DepCell01.isUserInteractionEnabled = true self.textTimeDep01DepCell01.text = "" } alert.addAction(cancelAction) alert.addAction(okAction) present(alert, animated: true, completion: nil) } case 7: //2番目のボタン if count % 2 == 1 { print ("ここまで来た case 7") //略略略 //case16から19まで続きます。 }
試みた対策
上記の count = count + 1のコードにif文を入れて「同じボタンがタップされた場合」即ち「ボタンタブ番号が同じ場合」という条件を入れようとしました。トライしたコードは下記のとおりですが記入した条件コードが適切でないのかビルド結果は同じで先に進めないのでご教示ください。
試みたコード
///////////// ロックボタン機能 var count = 0 @IBAction func lockButtonTapped(_ sender: Any) { //タップされたボタンのtag番号が同じなら // ロックボタンを押した回数を1つ増やす if [(sender as AnyObject).tag] == [(sender as AnyObject).tag] { count = count + 1 print ("ここまで来たIBAction lockImageに1を加える") } else { return } _ = displayImage() guard let lockButtonTapped = sender as? UIButton else { return }
ご参考事項
環境は下記のとおりです。
MacBook Pro (15-inch, 2016)
High Sierra OS10.13.6
Xcode Version 9.4 (9F1027a)Swift4
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/21 09:39
2018/11/22 02:00
2018/11/22 02:12
2018/11/22 02:16