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

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

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

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

Swift

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1301閲覧

キーボード表示中にUIAlertControllerを動作させたときキーボードをきれいに閉じたい

nkrmn_a

総合スコア27

Xcode

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

Swift

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/02/10 09:15

前提・実現したいこと

searchBarで入力し、キーボードにある検索ボタンを押下後
入力エラーのときは、UIAlertControllerで「検索する対象がありません」などというアラートを出しています。

アラートを出しているときはキーボードは閉じるのですが、
アラートのキャンセルボタン(キャンセルボタンと再入力ボタンがあります)を押下したとき、キーボードが閉じたまま元の画面を表示したいです。

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

キャンセルボタンを押すと、すぐにキーボードが現れ
その後、actionに書いてあるキーボードを閉じる処理が走ります。
この一瞬キーボードが現れるのをなくすにはどうしたらいいでしょうか。

ちなみに、searchBarは他のクラスで宣言しています。

該当のソースコード

swift

1 2 3 4func keyBoardErrorDialog(_ message: String){ 5 DispatchQueue.mainSyncSafe { 6 self.dialog = UIAlertController(title: "エラー", message: message, preferredStyle: .alert) 7 self.dialog.parentView = self 8 let okButton: UIAlertAction = UIAlertAction(title: "再入力", style: .default) 9 let cancelButton: UIAlertAction = UIAlertAction(title: "キャンセル", style: .default){ action in 10 // キーボードたたむ 11 self.view.endEditing(true) 12 } 13 14 self.dialog.addAction(cancelButton) 15 self.dialog.addAction(okButton) 16 present(self.dialog, animated: true, completion: nil) 17 } 18} 19 20

試したこと

・handlerの中に書いてみた → 無意味
・アラートが呼ばれた瞬間キーボードたたむ処理を走らせる → 再入力の時にキーボードを開かせることができない(調べたがわからなかった)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/02/10 14:35

直前にいじっていたtextField?searchBar?がfirstResponderになったままアラートを表示させたのかな? アラート?表示時にfirstResponderをはずしてみたらどうなりますか?
nkrmn_a

2020/02/11 01:27

アラート表示時にresignFirstResponder()を呼び出してみると、アラートが閉じた後でもキーボードはたたまれたままでした。 思い立って再入力のときにbecomeFirstReponderを呼び出してみたところ、最良ではないものの理想に近い動きになりました!ご助言ありがとうございます。 アラートのボタン押したときに走る処理は、少しレスポンスが遅いのがデフォなのでしょうか…?
guest

回答1

0

自己解決

tyobigorouさんのご助言のおかげでたどり着くことができました。
少しキーボードが表示されるレスポンスが遅いなぁと思うのですが、理想の動き方はしているので自己解決とさせていただきます。
アラートの再入力ボタンタップ ⇒ 少しの時間 ⇒ キーボード表示
という動きなので、もしここの「少しの時間」の改善方法分かる方いらしたら、引き続き教えていただきたいです。

swift

1func keyBoardErrorDialog(_ message: String, _searchBar: UISearchBar){ 2 3 searchBar.resignFirstResponder() 4 5 DispatchQueue.mainSyncSafe { 6 self.dialog = UIAlertController(title: "エラー", message: message, preferredStyle: .alert) 7 self.dialog.parentView = self 8 let okButton: UIAlertAction = UIAlertAction(title: "再入力", style: .default) { action in 9 searchBar.becomeFirstResponder() 10 } 11 let cancelButton: UIAlertAction = UIAlertAction(title: "キャンセル", style: .default){ action in 12 // なにもしない 13 } 14 15 self.dialog.addAction(cancelButton) 16 self.dialog.addAction(okButton) 17 present(self.dialog, animated: true, completion: nil) 18 } 19}

投稿2020/02/11 01:34

nkrmn_a

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問