iOS
UITextField personalizzato
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.