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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

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回答

899閲覧

キーボードを表示させた後、TableView上の何もないところをタップし、キーボードをしまいたい

hoya

総合スコア3

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

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/07/07 10:16

前提・実現したいこと

TextFieldをタップしキーボードを表示させた後、何もないところをタップしキーボードをしまいたいです。

ストーリーボードにドラッグしたときにしまう。というオプションは発見しドラッグではしまえるようになったのですが、

タップした時にキーボードをしまうためにオーバーライドしたtouchesBeganのメソッドがTableViewの上ではうまく反応しないです。

何か方法があれば、ご教授願います。

イメージ説明

該当のソースコード

Swift

1  //関係ないところをタップすると戻す。 2  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 3 if self.messageTextField.isFirstResponder == true { 4 self.messageTextField.resignFirstResponder() 5 } 6  }

試したこと

スクロールをドラッグでしまう。Returnキーでしまう。などの機能は問題なく動いております。

Swift

1  // キーボードが表示時に画面をずらす。 2 @objc func keyboardWillShow(_ notification: Notification?) { 3 guard let rect = (notification?.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue, 4 let duration = notification?.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else { return } 5 UIView.animate(withDuration: duration) { 6 let transform = CGAffineTransform(translationX: 0, y: -(rect.size.height)) 7 self.view.transform = transform 8 } 9 } 10 11 // キーボードが消えたときに、画面を戻す 12 @objc func keyboardWillHide(_ notification: Notification?) { 13 guard let duration = notification?.userInfo?[UIResponder.keyboardAnimationCurveUserInfoKey] as? TimeInterval else { return } 14 UIView.animate(withDuration: duration) { 15 self.view.transform = CGAffineTransform.identity 16 } 17 } 18 19  //キーボードでリターン押されると戻す。 20 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 21 textField.resignFirstResponder() 22 return true 23 }

補足情報(FW/ツールのバージョンなど)

Xcode12.0 beta
SwiftUI 2.0
MacOS 10.15.0 Catalina

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

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

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

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

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

guest

回答1

0

自己解決

以下の記事を参考にし、以下のファイルを追加してみると、実現できました。

【Swift】UITableViewのタッチイベントを検知する方法
http://mzgkworks.hateblo.jp/entry/uitableview-extension

Swift

1 2// UITableView+TouchEvent.swift 3 4import Foundation 5import UIKit 6 7extension UITableView { 8 public override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 9 self.next?.touchesBegan(touches, with: event) 10 } 11}

投稿2020/07/07 10:34

hoya

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問