iOS
Niestandardowy UITextField
Szukaj…
Wprowadzenie
Za pomocą niestandardowego pola UITextField możemy manipulować zachowaniem pola tekstowego!
Niestandardowe pole UITextField do filtrowania tekstu wejściowego
Oto przykład niestandardowego UITextField
który pobiera tylko tekst numeryczny i odrzuca wszystkie pozostałe.
UWAGA: W przypadku iPhone'a można to łatwo zrobić za pomocą klawiatury numerycznej, ale w przypadku iPada nie ma tylko klawiatury z cyframi
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: "")
}
}
Tak więc, gdziekolwiek chcemy pole tekstowe, które jako tekst wejściowy przyjmują tylko liczby, możemy użyć tego niestandardowego pola UITextField
Niestandardowe pole UITextField, aby nie zezwalać na wszystkie akcje, takie jak Kopiuj, Wklej itp
Jeśli chcemy wyłączyć wszystkie działania, takie jak Kopiuj, Wklej, Zamień, Wybierz itp. Z UITextField
, możemy użyć następującego niestandardowego pola tekstowego:
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
}
}
Korzystając z właściwości enableLongPressActions
, w razie potrzeby możemy włączyć wszystkie akcje w dowolnym momencie.