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

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

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

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

Swift

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

Q&A

解決済

1回答

1541閲覧

UITextFieldで文字入力するときキーボードより上に表示したい

sunglass

総合スコア303

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/05/24 09:23

https://qiita.com/koooooo/items/ad20862cd486e0656d17
を見て実装してみたのですがUITexFiledに文字を入力してもキーボードの上にずれてくれません。。

ぱっと見ScrollViewなども使ってないすですし、接続もなく、何が原因でキーボードの上に出てこないのかわかりません。。
イメージ説明

ViewやTextFiledの順番が問題なのでしょうか??
イメージ説明

ViewController

1import UIKit 2 3class TextFieldViewController: UIViewController, UITextFieldDelegate { 4 5 private var activeTextField: UITextField? 6 7 // returnで閉じる 8 internal func textFieldShouldReturn(_ textField: UITextField) -> Bool { 9 textField.resignFirstResponder() 10 return true 11 } 12 13 // 入力許可 14 internal func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 15 self.activeTextField = textField 16 return true 17 } 18 19 internal func setUpNotificationForTextField() { 20 let notificationCenter = NotificationCenter.default 21 notificationCenter.addObserver(self, selector: #selector(self.handleKeyboardWillShowNotification(_:)), name: .UIKeyboardWillShow, object: nil) 22 notificationCenter.addObserver(self, selector: #selector(self.handleKeyboardWillHideNotification(_:)), name: .UIKeyboardWillHide, object: nil) 23 } 24 25 @objc private func handleKeyboardWillShowNotification(_ notification: Notification) { 26 let userInfo = notification.userInfo //この中にキーボードの情報がある 27 let keyboardSize = (userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue 28 let keyboardY = self.view.frame.size.height - keyboardSize.height //画面全体の高さ - キーボードの高さ = キーボードが被らない高さ 29 let editingTextFieldY: CGFloat = (self.activeTextField?.frame.origin.y)! 30 if editingTextFieldY > keyboardY - 60 { 31 UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseIn, animations: { 32 self.view.frame = CGRect(x: 0, y: self.view.frame.origin.y - (editingTextFieldY - (keyboardY - 60)), width: self.view.bounds.width, height: self.view.bounds.height) 33 }, completion: nil) 34 35 } 36 } 37 38 @objc private func handleKeyboardWillHideNotification(_ notification: Notification) { 39 UIView.animate(withDuration: 0.25, delay: 0.0, options: .curveEaseIn, animations: { 40 self.view.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height) 41 }, completion: nil) 42 } 43} 44

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

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

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

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

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

TsukubaDepot

2020/05/24 13:41

私の環境は Swift5 なので上記のコードそのままでは使えませんでしたが、一部書き換えてやってみたところ、問題なくコンパイル、かつ view の移動ができました。 まずは、ごく簡単なサンプル(画面の下部にtextFieldがあるだけのシンプルなもの)を実装し、そこで上記コードで試されてみても動かないのか確認してみてはいかがでしょうか。
sunglass

2020/05/24 16:37

>ごく簡単なサンプル(画面の下部にtextFieldがあるだけのシンプルなもの)を実装し.. コメントありがとうございます。 明日最小コードのみで再現してみます。 >view の移動ができました。 viewの移動があるんですね。。 (よく見るとUIViewっぽいのありますね・・・) Viewを設置、接続、Fixあたりで上手く実装出来ると良いのですが・・・
sunglass

2020/05/25 06:27

Cannot infer contextual base in reference to member 'UIResponder' が出てBuild失敗します。 【試したこと】 ・Scroll View→View→TextFirldの順番で設置 ・TextFileddelegateとViewControllerを接続 ・Pageing Enabledにチェック(有効化) UIResponderとScrollView自体初見なので全くわかりません。
sunglass

2020/05/25 11:23

先ほど自己解決しました。。 いろいろ検索していて混乱しましたがteratailに質問投稿&コメントもらえてからだいぶ整理できました。 ありがとうございます!
guest

回答1

0

自己解決

解決しました。
シュミレーター上ではキーボードが出てこなかったのですが実機でBuildすると普通に出てきました。

import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() self.textField.delegate = self NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillChangeFrameNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } @objc func keyboardWillShow(notification: NSNotification) { if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { if self.view.frame.origin.y == 0 { self.view.frame.origin.y -= keyboardSize.height } else { let suggestionHeight = self.view.frame.origin.y + keyboardSize.height self.view.frame.origin.y -= suggestionHeight } } } @objc func keyboardWillHide() { if self.view.frame.origin.y != 0 { self.view.frame.origin.y = 0 } } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillChangeFrameNotification, object: nil) NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) } } extension ViewController: UITextFieldDelegate { func textFieldShouldReturn(_ textField: UITextField) -> Bool { self.view.endEditing(true) return false } }

投稿2020/05/25 10:25

sunglass

総合スコア303

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問