GithubHelp home page GithubHelp logo

chausovsurfstudio / textfieldscatalog Goto Github PK

View Code? Open in Web Editor NEW
25.0 25.0 8.0 67.86 MB

This is catalog of various input field with great opportunities for validation and formatting.

License: MIT License

Ruby 1.28% Swift 93.86% Makefile 0.97% Liquid 3.72% Objective-C 0.16%

textfieldscatalog's People

Contributors

alelenka avatar chausovsurfstudio avatar fixique avatar kombatkos avatar tranina-olesya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

textfieldscatalog's Issues

Поведение подчеркивающей линии при добавлении на кастомное superview

Был вот такой вот PR - #40.
В нем стало возможно добавить линию, подчеркивающую поле ввода, не к другим элементам на superview, как обычно, а на какое-либо свое.

Было замечено, что отступы, которые можно задать там же в параметрах конфигурации, не всегда при этом отрабатывают корректно, если ширина передаваемого superview отличается от ширины самого поля (к примеру, мы хотим отступ справа/слева в 5pt, но линия может вылезать справа за пределы передаваемого superview).

Необходимо:

  • проверить, так ли это
  • если баг есть - найти причину и поправить
  • посмотреть реализацию UnderlinedTextVIew, там кажется отступы, задаваемые пользователем, вообще никак в расчетах не участвуют, можно было бы и добавить
  • обновить документацию

Конфликт maskFormatter и maxLength

Если задать maskFormatter одновременно с maxLength то ограничения из маски будут приоритетнее.

Пример:

/// маска ограничивает на 21 символ
field.maskFormatter = MaskTextFieldFormatter(mask: "[_][~~~~~~~~~~~~~~~~~~~~]", notations: [ Notation(character: "~", characterSet: characterSet, isOptional: true)])

field.maxLength = 20

При вводе в поле позволяется ввести 21 символ.

Быть может так и задумано, но это неочевидно.

Использование полей ввода в отдельных модулях

Если ваше приложение построено по принципу многомодульной архитектуры - то при затягивании туда полей ввода и сборке этого модуля будут выскакивать 6 ворнингов. Надо бы понять причину их появления и пофиксить

Обновление под XCode 11

Попробовал запустить поля под новым XCode - и не все так уж гладко(

  • поехал placeholder, который выполнен как CATextLayer - почему то текст в нем отображается шрифтом TimesNewRoman. Это основная проблема, блокирующая использование полей под новым XCode
  • ну и в качестве бонуса - надо бы адаптировать Exmple проект под темную/светлую тему, чтобы все цвета корректно сменялись при изменении темы девайса

Добавить возможность задавать inputView у текстового поля

Есть кейсы, когда необходимо заменить клавиатуру чем-нибудь другим, например барабаном (поля ввода для выбора даты рождения/пола и т.д.), соответственно необходимо дать доступ к полу inputView. Плюс можно набросать вариант готовой вьюхи с барабаном дат, чтобы не создавать свою вьюху, а переиспользовать view из библиотеки.

Для UnderlinedTextField/UnderlinedTextView пересчитывать высоту всей view если подсказка есть, но ее не видно

изображение

Сейчас если задать hint то высота UnderlinedTextField/UnderlinedTextView не будет меняться когда подсказка не видна, возможно это стоит поправить.

Если так и задумывалось и это не баг, а фича - то issue стоит удалить :)

Доработать применение масок

В данный момент нет возможности вносить свои кастомные нотации при создании объекта MaskedTextFieldDelegate, отвечающего за форматирование текста при вводе. Необходимо пересмотреть архитектуру форматтеров, чтобы предоставить эту возможность.

Это позволит определять свои символы при создании масок, которым будут соответствовать определенные разрешенные для ввода группы символов - что позволит сделать механизм форматтеров более гибким.

Добавить SPM

Необходимо добавить возможность затягивать либу через Swift Package Manager и проверить как-это будет работать в модульном приложение.

Предложения по улучшению

Появилась необходимость в создании отдельного метода для настройки параметра capitalization у текстового поля.
Так же есть мысль сделать класс InnerTextField public, так как он обладает некоторыми интересными особенностями, которые могут быть полезны даже без использования текстового поля из данной библиотеки.

Выполнение reset без анимации

В данный момент при вызове reset() у какого-либо поля ввода - содержимое стирается, обновление UI происходит с анимацией.

Либо другой кейс - при установке текста в поле ввода содержимое обновляется с анимацией.

В данных кейсах анимация не всегда уместна, необходимо дать возможность выполнить данные действия без анимации. Для этого необходим ресерч того, как все же выполнить три CABasicAnimations одновременно и синхронно, ибо при первом знакомстве с этим багом - задача показалась не такой уж и просто.

Метод setup(heightConstraint:) пропал в версии 0.14.0

Добрый день,

Использовали версию 0.12.3 в которой был метод UnderlineTextField.setup(heightConstraint:) который устанавливал высоту, заданную в XIB через NSLayoutConstraint.

textField.setup(heightConstraint: containerHeightConstraint)
textField.heightLayoutPolicy = .elastic(minHeight: 60, bottomSpace: 5, ignoreEmptyHint: true)

После обновления до версии 0.14.0 данный метод пропал и в документации нет указания чем его заменить. Каким образом теперь устанавливать высоту текстфилда через констрейнты?

Заранее спасибо за информацию.

[FEATURE] Добавить возможность настраивать lineSpacing (TextView)

General description of the problem

Чаще всего дизайнеры рисуют многострочные поля ввода с lineSpacing > 1, но он настраивается через NSMutableParagraphStyle и через attributedText, сейчас использовать атрибуты возможности нет, а очень хочется

Describe the solution you'd like
Предложила бы добавить еще один параметр при установке конфигурации для текста с массивом атрибутов, и в момент когда для textView устанавливается текст вставлять его через attributedText =

Describe alternatives you've considered
В идеале стоит и для TextField добавить, но для начала можно только для TextView

[BUG] Неверное склонение слов в shortErrorText у валидатора

Describe the bug

Если в валидаторе сейчас установлено значение N и в поле ввода введено менее N символов, то отображается ошибка на русском языке "Поле должно содержать минимум N символов", причем склонение "символов" не зависит от числа - "1 символов", "2 символов" и тд

To Reproduce

Путь воспроизведения

  • взять любое поле ввода
  • сделать ему валдитор с минимальным количеством сиволов == 2
  • ввести в поле ввода 1 символ и снять фокус

Expected behavior

"Символов" будет склоняться

Screenshots

Uploading IMG_3344.PNG…

Library version and device type

  • iOS version: 14.5
  • device type: XS
  • Version: 0.16.0

Добавить расширяемый UITextView

Такое уже делалось, и не раз, будет не лишним добавить и в каталог.
Суть в том, что текстовое поле - однострочное, UITextView - многострочный. Необходимо написать такую обертку над UITextView, которая бы расширялась при увеличении высоты самого textView.

Правки по дизайну в UnderlinedTextField

  1. Необходимо перекрашивать линию под полем ввода при изменении конфигурации, так как в противном случае это происходит анимационно в момент первого показа - и выглядит это не очень, ибо из коробки - линия темно-серого цвета, и на светлом фоне данная анимация сильно заметна.
  2. Обычно при показе подсказки/ошибки - поле в большинстве случае будет расширяться, при сокрытии же этого элемента - наоборот сжиматься. Потому есть мысль: показывать подсказку/ошибку анимационно, чтобы поле успело расшириться, скрывать же без анимации.
  3. Необходимо сократить количество вызывов onHeightChanged замыкания, и не вызывать его, если высота поле не изменяется на самом деле.

Вынести повторяющийся код

Есть идея, состоящая в том, чтобы вынести повторяющийся код в текстовых полях в некое переиспользуемое ядро.

Это позволит более легко поддерживать механику работы полей, а также добавлять новые поля, основываясь на данном ядре. Ну и codebeat ругаться может поменьше будет :)

[FEATURE] Открыть сервисы/конфигурации - сделать изменяемыми или расширяемыми

General description of the problem

Если в поле необходимо больше состояний - сразу упираемся в стену - например если нам нужен floatingPlaceholder с возможностью окрашивания в дополнительный цвет - нам надо создать новый AbstractPlaceholderService который на 95% повторяет FloatingPlaceholderService, но не это самое страшное - надо продублировать и конфигурацию и даже ColorConfiguration получается много лишней работы и того же кода :(

А если мы хотим поменять цвет текста на дополнительный - то мы можем только заменить конфигурацию UnderlinedTextFieldConfiguration - при установке которой у нас все поле перерисовывается, и соответсвенно подергивается анимация(

Expected behavior

Хочется иметь возможность настраивать более гибко существующие поля

Describe the solution you'd like
Открыть сервисы и свойства, чтобы можно было их расширять или хотя бы изменять, а не жестко задавать в начале

Describe alternatives you've considered
Возможно стоит добавить обновление отдельных элементов, расширяемость сервисов и доступ и изменению конфигураций

Релиз v1.0.0

После выполнения рефакторинга внутренней архитектуры и закрытия всех актуальных и критических issue, а также после обновления документации, необходимо произвести релиз до версии 1.0.0

использовать поле ввода с обводкой , если я делаю programmatically а не через storyboards

class LoginController: UIViewController {
    
    private lazy var emailTextField: UITextField = {
        let tf = UITextField()
        tf.textColor = .black
        tf.autocorrectionType = .no
        tf.autocapitalizationType = .none
        tf.keyboardType = .emailAddress
        tf.attributedPlaceholder = NSAttributedString(string:"Email", attributes:[NSAttributedString.Key.foregroundColor: UIColor.systemGray])
        tf.font = UIFont(name: "Font", size: 16)
        tf.delegate = self
        tf.addTarget(self, action: #selector(handleTextInputChange), for: .editingChanged)
        return tf
    }()

Что нужно сделать чтобы emailTextField стал BorderedTextField?

Написать документацию

Написать подробную документацию как к самим полям вода, доступным методам, имеющимся фичам, так и к Example проекту (к примеру, как добавить свое поле ввода)

[BUG] TextView прыгает каретка/поле проскраливается за верхнюю границу View при переходе на новую строку (ios11.4)

Describe the bug
При использовании UnderlinedTextView и его наследников при переходе на новую строку, первый раз и иногда 3 - каретка прыгает и возвращается визуально на первую предыдущую строку, по факту -TextView проскроливается и первая строка оказывается за пределами видимости, скорее всего из-за ошибки расчета высоты, но надо покопать, до версии 0.14. такое поведение можно было поймать если не указать у поля heightPolicy
На ios 12 и выше такой проблемы не выявлено

To Reproduce

  1. Открыть примеры полей
  2. Симулятор 5s с ios 11.4
  3. Перейти на UITextView с подчеркиванием
  4. нажать return несколько раз, можно с текстом или без

Expected behavior
Как и на версиях ios >= 12 поле не скролится, а только увеличивается по высоте

Library version and device type

  • iOS version: 11.4
  • device type: iPhone 5s

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.