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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

1回答

1024閲覧

キーボードに生成された閉じるボタンでキーボードを閉じられるようにしたい

yotubarail

総合スコア23

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/02/20 06:34

編集2020/02/20 06:42

UITextViewをタップ後、UITextViewがついたUIAlertViewを表示できるようにコードを書いています。
下の画像のように、UIAlertView内のUITextViewで右上の完了ボタンを押すとキーボードを閉じられるようにしたいです。
しかし、commitButtonTapped()の中のself.view.endEditing(true)の処理が行われず、キーボードを閉じることができません。

自分では問題点がわからなかったため、質問させていただきました。

イメージ説明

該当部分のコードは以下の通りです。

Swift

1 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 2 if isTouch(touches: touches, view: memoTextView) { 3 print("TextView touch!!") 4 } 5 } 6 7 func isTouch(touches: Set<UITouch>, view:UIView) -> Bool{ 8 9 for touch: AnyObject in touches { 10 let t: UITouch = touch as! UITouch 11 if t.view?.tag == view.tag { 12 let alertController = UIAlertController(title: "\n\n\n\n\n\n", message: nil, preferredStyle: UIAlertController.Style.alert) 13 let margin:CGFloat = 8.0 14 let rect = CGRect(x: margin, y: margin, width: 255, height: 150.0) 15 let customView = UITextView(frame: rect) 16 customView.backgroundColor = UIColor.white 17 customView.textColor = .black 18 customView.font = UIFont(name: "Helvetica", size: 16) 19 customView.text = memoTextView.text 20 customView.delegate = self 21 22 // ツールバー生成 23 let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: 320, height: 40)) 24 // スタイルを設定 25 toolBar.barStyle = UIBarStyle.default 26 // 画面幅に合わせてサイズを変更 27 toolBar.sizeToFit() 28 // 閉じるボタンを右に配置 29 let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: self, action: nil) 30 // 閉じるボタン 31 let commitButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.done, target: self, action: #selector(commitButtonTapped)) 32 // スペース、閉じるボタンを右側に配置 33 toolBar.items = [spacer, commitButton] 34 // textViewのキーボードにツールバーを設定 35 customView.inputAccessoryView = toolBar 36 37 38 alertController.view.addSubview(customView) 39 let somethingAction = UIAlertAction(title: "メモ編集", style: UIAlertAction.Style.default, handler: {(alert: UIAlertAction!) in 40 print(customView.text!) 41 self.memoTextView.text = customView.text 42 }) 43 let cancelAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler: {(alert: UIAlertAction!) in print("cancel")}) 44 alertController.addAction(somethingAction) 45 alertController.addAction(cancelAction) 46 self.present(alertController, animated: true, completion: nil) 47 48 return true 49 } else { 50 return false 51 } 52 } 53 return false 54 } 55 56 @objc func commitButtonTapped() { 57 self.view.endEditing(true) 58 } 59

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

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

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

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

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

guest

回答1

0

自己解決

こちらを参考にして解決しました。

self.view.endEditing(true)だけでは最前面に表示されているUIAlertViewControllerには動かないことがわかったので、最前面のViewControllerを取得することで動くようになりました

投稿2020/02/21 01:55

yotubarail

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問