前提・実現したいこと
textFieldをタップするとピッカーが開き、そこから選ぶとtextFieldに表示されるというシステムを作っています。
textFieldに表示されるものは確実にピッカー内に表示されるようにしたく、コピペなどで入力されるものを弾く処理は最初はアラートで行なっていました。
しかし、textFieldをタップすると現れるコピーやペーストなどのメニューから表示されないようにしようということになり、UITextFieldのクラスを作り、caretRect、canPerformAction、selectionRectsを実装しました。
すると、最初から設置していたクリアボタンを押すとアプリが落ちてしまうようになってしまいました。クリアボタンとUITextFieldのクラスのどちらも実装することは不可能なのでしょうか。
ちなみに、UITextFiledExtensionクラスを実装する前は、クリアボタンは正常に動いていました。
プログラミング自体初心者中の初心者なので、質問も拙いかと思いますが、よろしくお願いいたします。
発生している問題・エラーメッセージ
クリアボタンを押すと、AppDelegateにThread 1: signal SIGABRTが表示され、アプリが落ちます。
(追記)
terminating with uncaught exception of type NSException と出ていました。
Utilityの接続かと思うのですが、この場合はどのように繋ぐのが正解なのでしょうか。
現在接続しているのは、textFieldをタップした時に表示されるピッカーを定義しているクラスです。
該当のソースコード
swift
1import UIKit 2 3class UITextFieldExtension: UITextField { 4 5 // 入力カーソル非表示 6 override func caretRect(for position: UITextPosition) -> CGRect { 7 return CGRect.zero 8 } 9 10 // コピー・ペースト・選択等のメニュー非表示 11 override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 12 return false 13 } 14 15 // 範囲選択カーソル非表示 16 override func selectionRects(for range: UITextRange) -> [UITextSelectionRect] { 17 return [] 18 } 19}
swift
1import UIKit 2 3 4extension SearchAreaViewController { 5 6(中略) 7 8//UIPickerViewのインスタンスを作る 引数に.areaPickerを渡す 9 func setupUIAreaPiker() { 10 areaTextField.inputView = getPickerView(type: .areaPicker) 11 areaTextField.inputAccessoryView = accessoryToolbarForArea 12 //クリアボタン 13 areaTextField.clearButtonMode = UITextField.ViewMode.whileEditing 14 //見切れないようにする 15 self.areaTextField.adjustsFontSizeToFitWidth = true 16 self.areaTextField.minimumFontSize = 0.3 17 } 18}
試したこと
caretRect、canPerformAction、selectionRectsのそれぞれをコメントアウトしたりなどもしてみましたが、結果は何も変わりませんでした。
storyBoardのカスタムクラスの記入を無くしてみたりなどなど、原因がさっぱり分からなかったので試してみましたが、これも結果は同じでした。
回答1件
あなたの回答
tips
プレビュー