https://qiita.com/koooooo/items/ad20862cd486e0656d17
を見て実装してみたのですがUITexFiledに文字を入力してもキーボードの上にずれてくれません。。
ぱっと見ScrollViewなども使ってないすですし、接続もなく、何が原因でキーボードの上に出てこないのかわかりません。。
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
私の環境は Swift5 なので上記のコードそのままでは使えませんでしたが、一部書き換えてやってみたところ、問題なくコンパイル、かつ view の移動ができました。
まずは、ごく簡単なサンプル(画面の下部にtextFieldがあるだけのシンプルなもの)を実装し、そこで上記コードで試されてみても動かないのか確認してみてはいかがでしょうか。
>ごく簡単なサンプル(画面の下部にtextFieldがあるだけのシンプルなもの)を実装し..
コメントありがとうございます。
明日最小コードのみで再現してみます。
>view の移動ができました。
viewの移動があるんですね。。
(よく見るとUIViewっぽいのありますね・・・)
Viewを設置、接続、Fixあたりで上手く実装出来ると良いのですが・・・
Cannot infer contextual base in reference to member 'UIResponder' が出てBuild失敗します。
【試したこと】
・Scroll View→View→TextFirldの順番で設置
・TextFileddelegateとViewControllerを接続
・Pageing Enabledにチェック(有効化)
UIResponderとScrollView自体初見なので全くわかりません。
先ほど自己解決しました。。
いろいろ検索していて混乱しましたがteratailに質問投稿&コメントもらえてからだいぶ整理できました。
ありがとうございます!
回答1件
あなたの回答
tips
プレビュー