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 запрещает все действия, такие как копирование, вставка и т. Д.
Если мы хотим отключить все действия, такие как Copy, Paste, Replace, Select и т. Д. Из 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
, мы можем активировать все действия в любое время позже, если это необходимо.