iOS
Anpassad UITextField
Sök…
Introduktion
Med hjälp av anpassad UITextField kan vi manipulera beteendet i textfält!
Anpassad UITextField för filtrering av inmatningstext
Här är ett exempel på anpassad UITextField
som bara tar numerisk text och kasserar allt annat.
OBS! För iPhone är det enkelt att göra detta med hjälp av tangentbordet Number, men för iPad finns det inget tangentbord med endast nummer
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: "")
}
}
Så var vi än vill ha textfält som bara tar siffror som inmatningstext kan vi använda detta anpassade UITextField
Anpassad UITextField för att avvisa alla åtgärder som kopia, klistra in, etc.
Om vi vill inaktivera alla åtgärder som Kopiera, klistra in, ersätta, välja osv från UITextField
kan vi använda följande anpassade textfält:
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
}
}
Med egenskapen enableLongPressActions
kan vi aktivera alla åtgärder när som helst senare, om det behövs.
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow