Ricerca…


introduzione

Usando UITextField personalizzato, possiamo manipolare il comportamento del campo di testo!

UITextField personalizzato per filtrare il testo di input

Ecco un esempio di UITextField personalizzato che prende solo testo numerico e scarta tutti gli altri.

NOTA: per iPhone è facile farlo utilizzando la tastiera del tipo numerico, ma per iPad non esiste una tastiera con solo numeri

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: "")
}
}

Quindi, ovunque vogliamo campi di testo che prenderebbero solo numeri come testo di input, allora possiamo usare questo UITextField personalizzato

UITextField personalizzato per non consentire tutte le azioni come copia, incolla, ecc

Se vogliamo disabilitare tutte le azioni come Copia, Incolla, Sostituisci, Seleziona, ecc. Da UITextField , possiamo usare il seguente campo di testo personalizzato:

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
}
}

Usando la proprietà enableLongPressActions , possiamo abilitare tutte le azioni in qualsiasi momento successivo, se necessario.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow