Skip to main content

Что следует знать про формы ввода

Первым делом, посмотрите видео об основном, что следует знать о формах ввода:



Ниже описаны тезисы из видео:

  • Данные, введенные пользователем, должны валидироваться
    • Поле не должно валидироваться, пока юзер не закончил его ввод, чтобы не пугать преждевременными ошибками
    • Если поле одно - первая валидация должна произойти после ввода данных в поле и нажатия кнопки-триггера, после этого валидация происходит в момент заоплнения поля
    • Если полей несколько - валидация происходит при переходе с одного поля на другое (когда невалидное поле осталось одно - в момент его заполнения наверное?)
  • В клавиатуре должны быть настроены вспомогательные клавиши - переход фокуса на следующее поле, отправка данных на последнем поле (вызов дейтсвия по триггер-кнопке)
  • Должны быть правильно настроены клавиатуры и подсказки (предложение автозаполнения типа? пароль/email/телефон) для разных типов вводимых данных
    • email - текст(латиница), цифры, символы - клава только с латиницей, без других языков
    • текст - просто обычная клава
    • номер телефона: цифирная клава без символов
  • Обратный отсчет на форме - для таймера нужно сравнивать время начала отсчета и текущее время, чтобы правильно отсчитать
    • На iOS приложение полностью ставится на паузу при сворачивании, если бы были на delay - то он бы не работал
    • Использовать delay нельзя, потому что он будет работать не ровно через секунду, а через чуть большее время, т.к. мобилки - это не системы реального времени, поэтому рано или поздно накопится ошибка, из-за чего какая-то секунда проскочит (отображалось 11 сек, а потом сразу 9 сек)
    • надо брать текущее время, и сравнивать его миллисекундами с временем запуска таймера - тогда не поломается
  • Если на форме есть связанные поля - например пароль и подтверждение пароля, то надо чтобы их валидация зависела друг от друга и чтобы она срабатывала при изменении любого из полей.
    • Пример: ввели пароль, потом ввели повторение пароля - видим, что пароли не совпадают. Поняли, что первый раз забыли одну букву - вернулись и добавили пропущенную букву. После этого валидация должна пройти успешно
  • Если сервер сообщает об ошибке в данных, полученных из поля ввода - нужно выводить эту ошибку у этого поля. Локальная проверка полей ввода также должна отображать ошибки валидации у конкретного поля
    • Примеры ошибок валидации, о которых может сообщить сервер:
      • email уже используется
      • email не найден
      • Время недоступно
      • никнейм занят
      • новый пароль совпадает со старым
  • Если ожидается работа с сетью или какая-то другая работа программы с введенными данными - формы ввода и триггер-кнопка должны становиться неактивными
  • Если на форме есть поля, которые должны заполнять друг друга (конвертер валют) - важно сделать это аккуратно и не создать рекурсию изменений. Логика должна быть полностью в общем коде :)
  • Если триггер-кнопка активируется только при валидных данных - нужно быть аккуратным - если пользователю не будет указано что не так с тем, что он ввел, он может не догадаться почему кнопка не активна и посчитает приложение сломанным
  • Если форма длинная, мы все заполнили и проскроллили вниз до триггер-кнопки, нажали кнопку и нам вернулась ошибка в поле, которое не видно - надо скроллить к первому полю с ошибкой
  • Должна быть корректно проставлена информация о контенте поля для автозаполнения (email, телефон, пароль, файл)
  • Обязательные поля должны быть как-то выделены, например звездочкой, юзер не должен гадать какие поля нужно заполнять
  • Те данные, которые приложение может заполнить автоматически, должны заполняться автоматически ()
  • Многострочные поля ввода должны растягиваться при появлении множества строк, но до ограниченной высоты - дальше должен включаться скролл для просмотра контента
  • Пробелы в начале и конце введенного текста должны обрезаться
  • При выборе даты должны быть проставлены соответствующие границы возможного выбора (нельзя выбрать в прошлом или будущем)
  • Поля по типу цены или зп или чего-то такого - важно стирать ведущие нули, и правильно переводить текст в дробное число