iOS: отмена сбоя приложения, когда в текстовом поле есть фильтр
Я хотел бы поделиться своим опытом, чтобы он мог помочь другим!
у нас может быть текстовые поля в нашем приложении, которые показывают определенный набор символов. мы фильтруем пользовательский ввод либо реализуя
[textField:shouldChangeCharactersInRange:replacementString:][1]
или путем регистрации UIControlEventEditingChanged
событие
это может привести к ситуации, когда пользователь использует undo
функция и приложение могут завершиться с NSRangeException.
То, как я решил это, я убираю undo
действие, когда я не хочу, чтобы какой-либо текст / символ был добавлен в текстовое поле или вставлен в текстовое поле.
например, в реализации [textField:shouldChangeCharactersInRange:replacementString:]
я мог бы вернуть НЕТ за не разрешенные символы. как раз перед этим я выполняю
[textfield.undoManager removeAllActions];
это гарантирует, что пользователь не сможет отменить, и приложение не упадет!