サーチ…


前書き

カスタムUITextFieldを使用すると、テキストフィールドの動作を操作できます!

入力テキストをフィルタリングするためのカスタムUITextField

ここでは、数字のテキストのみを取り、他のすべてを破棄するカスタムUITextField例を示します。

注: iPhoneの場合は、Numberタイプのキーボードを使用して簡単に行うことができますが、iPadの場合は数字だけのキーボードはありません

class NumberTextField: UITextField {
    
required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    registerForTextFieldNotifications()
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

override func awakeFromNib() {
    super.awakeFromNib()
    keyboardType = .numberPad//useful for iPhone only
}

private func registerForTextFieldNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(NumberTextField.textDidChange), name: NSNotification.Name(rawValue: "UITextFieldTextDidChangeNotification"), object: self)
}

deinit {
    NotificationCenter.default.removeObserver(self)
}

func textDidChange() {
    text = filteredText()
}
private func filteredText() -> String {
    let inverseSet = CharacterSet(charactersIn:"0123456789").inverted
    let components = text!.components(separatedBy: inverseSet)
    return components.joined(separator: "")
}
}

したがって、入力テキストとして数字だけを取るテキストフィールドが必要な場合は、このカスタムUITextFieldを使用することができます

コピー、貼り付けなどのすべての操作を禁止するカスタムUITextField

コピー、貼り付け、置換、選択などのすべてのアクションをUITextFieldから無効にしたい場合は、次のカスタムテキストフィールドを使用できます。

class CustomTextField: UITextField {

var enableLongPressActions = false

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(frame: CGRect) {
    super.init(frame: frame)
}

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

enableLongPressActionsプロパティを使用すると、必要に応じて後でいつでもすべてのアクションを有効にできます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow