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

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

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

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

Swift

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

Q&A

解決済

1回答

1551閲覧

UITextFieldのメニュー非表示とクリアボタン実装をどちらも実装したい

nkrmn_a

総合スコア27

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/08/19 08:58

編集2019/08/21 02:50

前提・実現したいこと

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のカスタムクラスの記入を無くしてみたりなどなど、原因がさっぱり分からなかったので試してみましたが、これも結果は同じでした。

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

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

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

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

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

hameji

2019/08/19 12:47

「Thread 1: signal SIGABRT」とみなさん書きますが、 それはエラーが起こった結果、終了時に出る文字であって、 何のエラーかは別にコンソールに出力されていると思います。 よく見て、それを記載していただけるとアドバイスがつくと思いますよ。
nkrmn_a

2019/08/20 01:19

ご指摘ありがとうございます。 追記いたしました。
guest

回答1

0

自己解決

textField.addTargetを共に実装していたのですが、どうやらそちらが原因だったようです。addTargetをコメントアウトしたら正常に動きました。
表題の問題についてはむしろなんの問題もありませんでした。。
自己解決とさせていただきます。

投稿2019/08/26 02:23

編集2019/08/26 02:25
nkrmn_a

総合スコア27

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問