TextField`に数字パッドがあり、数字が含まれているときだけ関数が実行されます。
ユーザーがアプリをクラッシュさせる唯一の選択肢は、TextField
に文字を貼り付けてOKをクリックする場合です。
どうすれば、TextFieldに文字を貼り付けられないようにすることができますか?
私はLeonardo Savio Dabusと同意見で、もし私があなただったら、文字列チェックを使って警告を出しますね。しかし、もしペーストオプションを無効にすることが、あなたのアプリにどうしても入れたい機能であれば、より多くの作業をする必要があります。以下にその手順を示します。
ステップ1: UITextField
を継承したクラスを作成する必要があります。この例では、CustomUITextField
を作成しました。
import Foundation
import UIKit // don't forget this
class CustomUITextField: UITextField {
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
if action == "paste:" {
return false
}
return super.canPerformAction(action, withSender: sender)
}
}
ステップ2: ストーリーボードとViewControllerを接続します。通常通り、IBOutlet
を宣言します。
@IBOutlet var textFieldA: CustomUITextField?
IBOutlet`の横の丸い部分を、ストーリーボードのtextFieldに接続します。それから、これは重要なことですが、無視されがちです。
以下に簡単なスナップショットを掲載します。
画像の説明を入力してください]1。
それはそれである、これが働くことを望む。
信用:
主に https://teamtreehouse.com/forum/disable-paste-in-uitextfielduitextview-swift を参考にしました。
canPerformAction` メソッドの挙動についてもっと知りたい方は、objective-C 版ですが、コンセプトは共通しています。https://stackoverflow.com/questions/20223966/how-can-i-detect-that-a-user-has-tapped-a-formatting-button-in-a-uimenucontrolle。
以下のように、テキストフィールドのSent Events (editing changed)にIBActionを追加するだけで、入力時に数字以外の文字列をフィルタリングすることができます。
@IBAction func changedTextAction(sender: UITextField) {
sender.text = String(Array(sender.text).map{String($0)}.filter{ $0.toInt() != nil }.map{Character($0)} )
}