iOS
カスタムUITextField
サーチ…
前書き
カスタム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