🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

1501閲覧

iPhoneで下から出るDatePickerを使っていたが一瞬で閉じてしまうようになってしまった。

data7600

総合スコア18

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/10/08 05:06

前提・実現したいこと

iPhoneアプリで、キーボードの代わりにpickerViewが下から出てくる仕様にしていましたが、iOS12.4あたり以降、一瞬出てすぐに引っ込んでしまいます。
普通に使えるように戻したいです。

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

エラーメッセージ等はありません。

該当のソースコード

関連しそうなところをいくつか。

swift

1//キーボードをピッカーにする 2 func keyboardSetUp() { 3 timeText.delegate = self as? UITextFieldDelegate 4 //テキストフィールドのキーボードをdatePickerにする 5 timeText.inputView = datePicker 6 //ピッカーのモードをカウントダウンタイマーに 7 datePicker.datePickerMode = UIDatePickerMode.countDownTimer 8 self.datePicker.countDownDuration = TimeInterval(self.countDownSetValue) 9 //ピッカーの値の通知先を設定。 10 datePicker .addTarget(self, 11 action: #selector(self.datePickerValueChanged), 12 for: UIControlEvents.valueChanged) 13 } 14 15//MARK: キーボードに閉じるボタンを付ける。 16 func setCloseButton() { 17 18 let keyboardDoneButtonView = UIToolbar() 19 keyboardDoneButtonView.barStyle = UIBarStyle.black 20 keyboardDoneButtonView.isTranslucent = true 21 keyboardDoneButtonView.tintColor = nil 22 keyboardDoneButtonView.sizeToFit() 23 24 let doneButton = UIBarButtonItem(title: "Close", 25 style: UIBarButtonItemStyle.done, 26 target: self, 27 action: #selector(closeKeyBoard)) 28 29 let spacer1 = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, 30 target: nil, 31 action: nil) 32 let spacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, 33 target: nil, 34 action: nil) 35 36 keyboardDoneButtonView .setItems([spacer,spacer1,doneButton], animated: false) 37 keyboardDoneButtonView.isUserInteractionEnabled = true 38 keyboardDoneButtonView.sizeToFit() 39 40 timeText.inputAccessoryView = keyboardDoneButtonView 41 minutesText.inputAccessoryView = keyboardDoneButtonView 42 } 43 44 45//datePickerのエラー回避のためキーボードが出たときに初期値入力の処理をする。 46 @objc func showKeyBoard(notification: Notification) { 47 print("キーボードが出た") 48 DispatchQueue.main.async { 49 self.datePicker.countDownDuration = TimeInterval(self.countDownSetValue) 50 } 51 } 52 53//キーボードを閉じる 54 @objc func closeKeyBoard() { 55 timeText.resignFirstResponder() 56 minutesText.resignFirstResponder() 57 print("キーボードを閉じた") 58 }

試したこと

上記キーボードに関連しそうなメソッドをコメントアウトするなどしてみたが、特に改善はみられず。
キーボードをピッカーでなくしても同じ、
クローズボタンを外しても変わらず。
気になった点は、起動して初回は多少表示時間が長い。(0.5秒位?)
2回目以降は視認できないほど一瞬出てきて出きらないうちに引っ込む感じ。
デバッグエリアには「キーボードが出た」は表示されるが、「キーボードを閉じた」は表示されていないのでキーボードを閉じるメソッドは呼ばれていないようです。
このアプリはSwiftとObjective-cが混在していて、Objective-cで同じ仕様のビューでも同じく一瞬で閉じてしまいます。
また、通常のテキスト入力では症状が出ないビューもあります。

Xcode5になって色々変わりすぎてて困ってます。
手がかり無さ過ぎとは思いますが思い当たることがあれば宜しくおねがいします。

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

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

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

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

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

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

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

takabosoft

2019/10/08 05:26

最低限の機能に絞った新規アプリでも再現するかを試してください。 再現しないのであれば、その違いの中に要因があることになります。
data7600

2019/10/08 10:31

ありがとうございます。 久しぶりにXcodeをアップデートして久しぶりに新規アプリでしようとしたらSwiftUIになってて使い方がわからずパニックになってこちらに投稿していました。 落ち着いてStoryboardで作成してキーボードを再現してみましたが、症状は再現されませんでした。 キーボードを出す事はできるが、常にキーボードを閉じる命令がかかってるような感触を受けます。 キーボードが閉じる条件ってなにかあるでしょうか?
takabosoft

2019/10/09 01:21

いえ、心当たりはありませんが、再現しないのでしたら、既存アプリと新規アプリとの差分を埋めていって該当箇所を見つけるしかないかなとは思います。新規アプリに足すのか既存アプリを削るのかはおまかせですが。
hameji

2019/10/10 16:14

resignFirstResponder()がどこでかかるかをよく見てみるのがいいのではないでしょうか? alphaなどの操作は行っていないんですよね?
data7600

2019/10/12 06:23

ありがとうございます。 resignFirstResponder()自体削除しても変わらないので関係なかったようです。 原因はわかりませんでしたが、一応の解決はみました。(-人-)
guest

回答2

0

はっきりとした原因はわかりませんでした。
当該アプリ内で新規にビューを作ってテストしても症状が再現されました。
アプリ全体に影響が及んでいること、textFieldで症状が現れ、textViewで症状が出ないことで思い当たったのがtextFieldへのコピペ禁止でした。

今まで使っていたコピペ禁止のコードを削除し、以下、

extension UITextField {

open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { return false }

}

こちらのコードを使うことで症状が解消されました。
はっきりとした原因は特定できませんでしたが症状が解消されたことで解決とさせていただきます。
ありがとうございました。

投稿2019/10/12 06:44

data7600

総合スコア18

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

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

0

自己解決

はっきりとした原因はわかりませんでした。
当該アプリ内で新規にビューを作ってテストしても症状が再現されました。
アプリ全体に影響が及んでいること、textFieldで症状が現れ、textViewで症状が出ないことで思い当たったのがtextFieldへのコピペ禁止でした。

今まで使っていたコピペ禁止のコードを削除し、以下、

extension UITextField {

open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { return false }

}

こちらのコードを使うことで症状が解消されました。
はっきりとした原因は特定できませんでしたが症状が解消されたことで解決とさせていただきます。
ありがとうございました。

投稿2019/10/12 06:29

data7600

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問