Я новичок в Swift и узнаю о делегатах:
class ZipCodeTextFieldDelegate: NSObject, UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var newText = textField.text! as NSString
newText = newText.replacingCharacters(in: range, with: string) as NSString // this line
return newText.length <= 5
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true;
}
}
Это в основном делегат, ограничивающий количество символов до 5. Но я не совсем уверен, какую роль этот метод replacingCharacters
играет в этой функции. Документация Apple показывает, что она
Возвращает новую строку, в которой символы в указанном диапазоне получателя заменяются данной строкой.
, что кажется довольно простым , Он заменяет некоторый диапазон символов заменой на ваш выбор. Я вижу, что textField
имеет параметр, называемый range
и replacementString
, но какой диапазон предоставляется и на что они заменяются?
Основной ViewController
, который используется делегатом в не предоставляет ни один из них. Он просто создает экземпляр делегата и применяет его к соответствующему textField
let zipCodeDelegate = ZipCodeTextFieldDelegate()
// MARK: Outlets
@IBOutlet weak var textField: UITextField!
// MARK: Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self.zipCodeDelegate
}