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

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

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

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

Swift

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

Q&A

0回答

478閲覧

テキストフィールドがキーボードと被らない様にしたい。

oimo999

総合スコア3

Xcode

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

Swift

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

0グッド

1クリップ

投稿2020/05/26 14:10

前提・実現したいこと

テキストフィールドを選択した時にキーボードが被ってしまう場合のみ、
Viewを持ち上げてキーボードが被らない様に実装したい。

発生している問題・エラーメッセージ

調べて出てきたコードをいじって、自分なりに書いてみましたがテキストフィールドを選択しても画面が動きません。

該当のソースコード

swift

1import UIKit 2import RealmSwift 3 4class AddMorningTextViewController : UIViewController, UITextFieldDelegate { 5 6 7 @IBOutlet weak var dateLabel: UILabel! 8 @IBOutlet weak var appreciationText1: UITextField! 9 @IBOutlet weak var appreciationText2: UITextField! 10 @IBOutlet weak var appreciationText3: UITextField! 11 12 @IBOutlet weak var makeGoodText1: UITextField! 13 @IBOutlet weak var makeGoodText2: UITextField! 14 @IBOutlet weak var makeGoodText3: UITextField! 15// 日付の取得 16 var dateResult = "" 17// TextFieldは2つあるからスクロール移動用に一つにまとめる 18 var selectedTextField: UITextField? 19// 画面の高さを取得 20 let screenSize = UIScreen.main.bounds.size 21 22 23 override func viewDidLoad() { 24 super.viewDidLoad() 25 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillChangeFrameNotification, object: nil) 26 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) 27 28 dateLabel.text = dateResult 29 appreciationText1.delegate = self 30 appreciationText2.delegate = self 31 appreciationText3.delegate = self 32 makeGoodText1.delegate = self 33 makeGoodText2.delegate = self 34 makeGoodText3.delegate = self 35 36 } 37 38 39// 選択したテキストフィールド取得 40 func textFieldDidBeginEditing(_ textField: UITextField) { 41 self.selectedTextField = textField 42 } 43 44// キーボードが開いた時 45 @objc func keyboardWillShow(notification: NSNotification) { 46 let textUnderHeight: CGFloat = selectedTextField!.frame.maxY 47 let screenHeight = screenSize.height 48 49 if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { 50 if screenHeight - textUnderHeight < keyboardSize.height { 51 self.view.frame.origin.y = keyboardSize.height + textUnderHeight - screenHeight + 20 52 } else { 53 self.view.frame.origin.y = 0 54 } 55 } 56 } 57 58// キーボードが閉じた時 59 @objc func keyboardWillHide() { 60 if self.view.frame.origin.y != 0 { 61 self.view.frame.origin.y = 0 62 } 63 } 64// Returnでキーボードを閉じる 65 func textFieldShouldReturn(_ textField: UITextField) -> Bool { 66 self.view.endEditing(true) 67 return true 68 } 69 70 override func viewWillAppear(_ animated: Bool) { 71 72 super.viewWillAppear(animated) 73 74 let realm = try! Realm() 75 76 if let savedMorningTextData = realm.objects(MorningTextData.self).filter("date == '(self.dateResult)'").last { 77 self.appreciationText1.text = savedMorningTextData.appreciationTextData1 78 self.appreciationText2.text = savedMorningTextData.appreciationTextData2 79 self.appreciationText3.text = savedMorningTextData.appreciationTextData3 80 self.makeGoodText1.text = savedMorningTextData.makeGoodTextData1 81 self.makeGoodText2.text = savedMorningTextData.makeGoodTextData2 82 self.makeGoodText3.text = savedMorningTextData.makeGoodTextData3 83 84 } 85 } 86 87// 保存ボタンの処理 88 @IBAction func morningTextSaveButton(_ sender: UIButton) { 89 let title = "朝の日記の保存" 90 let message = "朝の日記が保存されました" 91 let okText = "OK" 92 93 let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert) 94 let okayButton = UIAlertAction(title: okText, style: UIAlertAction.Style.cancel, handler: nil) 95 alert.addAction(okayButton) 96 97 present(alert, animated: true, completion: nil) 98 99 let realm = try! Realm() 100 print(Realm.Configuration.defaultConfiguration.fileURL!) 101 let addMorningText = MorningTextData() 102 addMorningText.date = dateResult 103 addMorningText.appreciationTextData1 = appreciationText1.text ?? "" 104 addMorningText.appreciationTextData2 = appreciationText2.text ?? "" 105 addMorningText.appreciationTextData3 = appreciationText3.text ?? "" 106 addMorningText.makeGoodTextData1 = makeGoodText1.text ?? "" 107 addMorningText.makeGoodTextData2 = makeGoodText2.text ?? "" 108 addMorningText.makeGoodTextData3 = makeGoodText3.text ?? "" 109 110 try! realm.write() { 111 realm.add(addMorningText, update: .all) 112 } 113 } 114 115// 画面を移る時の処理 116 override func viewWillDisappear(_ animated: Bool) { 117 super.viewWillDisappear(animated) 118 NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillChangeFrameNotification, object: nil) 119 NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil) 120 } 121} 122 123

試したこと

テキストフィールドのy座標を取得して、キーボードとかぶる場合のみ差分viewを持ち上げる様書いたつもりです。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

TsukubaDepot

2020/05/26 14:15

https://teratail.com/questions/264439 たとえば、上記の質問は参考になりますでしょうか。 質問内のQiita記事を使うと、ご自身ではほとんどコードを書くことなく(かわりに、ViewControllerなどが記事内で紹介されたクラスを継承する形になる)ご希望の処理が行えます。
oimo999

2020/05/27 02:07

ありがとうございます! 過去にこちらで実装して見ましたが実機でのビルドは行っていなかったので試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問