Поиск…


Вступление

Используя пользовательский 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 , мы можем активировать все действия в любое время позже, если это необходимо.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow