こんにちは。リンク内容このリンク先のとおりにタイトルの処理を実装しました。
実際に、キーボード上にtextfieldを移動させることには成功したのですがこのキーボードに2文字目を打ち込むとtextfieldが消えてしまいます(おそらくkeyboardWillHide()が働いています)。
2文字目でなくても予測変換選択時、事前に打ったtextの削除時、1文字目を打ちその後確定をおした時etc...
キーボードをタップする様々なアクション時にtextfieldが消えます。
これは一体何が起こっているのでしょうか。理想はキーボードの確定をタップした時に同時にtextfieldを下ろしたいです。
解決法が分かる方ぜひ回答をお待ちしております。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
キーボード入力をした際に画面の再描画が行われ、キーボードの高さが考慮されない状態でテキストフィールドの高さが決まっているので、画面の下の方にずれるような動きをしています。
一応下記の方法でテキストフィールドは消えないようになりますが、キーボードが隠れた後にテキストフィールドの位置が少しずれます。(すいませんそこまでは調べきれていません。)
import UIKit class ViewController: UIViewController { let SCREEN_SIZE = UIScreen.main.bounds.size @IBOutlet weak var textField: UITextField! var isOpen = false // キーボードが表示されているかの判定 var height: CGFloat! // キーボードの高さ override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil) //ここでUIKeyboardWillShowという名前の通知のイベントをオブザーバー登録をしている NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide(_:)), name: NSNotification.Name.UIKeyboardDidHide, object: nil) //ここでUIKeyboardWillHideという名前の通知のイベントをオブザーバー登録をしている } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // 画面の描画ごとにテキストフィールドの高さを調整する override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() if isOpen { textField.frame.origin.y = SCREEN_SIZE.height - self.height - textField.frame.height } } //Viewをタップした時に起こる処理を描く関数 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { //キーボードを閉じる処理 view.endEditing(true) } //UIKeyboardWillShow通知を受けて、実行される関数 @objc func keyboardWillShow(_ notification: NSNotification){ let keyboardHeight = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as AnyObject).cgRectValue.height textField.frame.origin.y = SCREEN_SIZE.height - keyboardHeight - textField.frame.height // キーボードの高さを保存する self.height = keyboardHeight isOpen = true } //UIKeyboardWillShow通知を受けて、実行される関数 @objc func keyboardWillHide(_ notification: NSNotification){ textField.frame.origin.y = SCREEN_SIZE.height - textField.frame.height isOpen = false } }
個人的にはスクロールビューを使用した方が制御が楽だと思っていますので、参考記事を添付します。
何か参考になりましたら幸いです。
https://ameblo.jp/hayashidesuga/entry-11971210696.html
https://qiita.com/kobaboy/items/d56086b92f84c586562d
投稿2018/04/09 22:15
総合スコア1277
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/10 12:13
2018/04/10 21:38
2018/04/11 07:16
2018/04/11 11:17
2018/04/12 09:25