Внедрение пользовательской клавиатуры со специальными персонажами в Ios
Расширения клавиатуры iOS Custom
iOS обеспечивает надежную основу для создания пользовательских расширений клавиатуры, которые могут заменять или дополнять системную клавиатуру. Эти расширения выполняются как отдельные процессы и песочницы, что означает, что они имеют ограниченный доступ к системным ресурсам и пользовательским данным. Класс «UIInputViewController» является основой для любой пользовательской клавиатуры, управления обработкой ввода, макетом просмотра и связью с приложением хоста.
Настраиваемые клавиатуры могут включать в себя любую компоновку, включая специальные символы, акцентированные буквы, смайлики или даже ввод на основе жестов.Однако Apple накладывает строгие правила: клавиатура не может получить доступ к сетевым ресурсам без явного разрешения пользователя, и она не должна собирать данные нажатия клавиш для аналитики без четкого согласия.Это обеспечивает конфиденциальность пользователей, при этом позволяя разработчикам гибкость.
При создании пользовательской клавиатуры вы, по сути, создаете расширение приложения. Расширение упаковано в хост-приложение, и пользователи должны установить это приложение, а затем включить расширение через Настройки > General > Клавиатура > Клавиатура > Клавиатура. В отличие от Android, iOS не позволяет полностью заменить системную клавиатуру; пользователи должны переключиться на вашу клавиатуру вручную.
Для специальных символов реальная сила заключается в разработке эффективных шаблонов доступа. Многие разработчики создают клавиатуры, которые логически группируют символы, предлагают всплывающие окна с длинным нажатием для дополнительных вариантов или предоставляют выделенный слой символов. Следующие разделы проходят через каждый этап создания готовой к производству кастомной клавиатуры со специальными символами.
Настройка проекта расширения клавиатуры
Создание пользовательской клавиатуры начинается внутри Xcode. Вам нужно как приложение для контейнера, так и цель расширения клавиатуры.
Добавить новую цель в Xcode
Откройте свой существующий проект iOS или создайте новый. Перейдите в File > New > Target, затем выберите Custom Keyboard Extension в категории Расширение прикладной клавиатуры. Дайте ему название продукта, например «SpecialCharKeyboard». Xcode генерирует шаблон с подклассом «UIInputViewController» «KeyboardViewController».
Настройка Info.plist
Расширение «Info.plist» содержит два критических ключа в разделе «NSExtension»:
- IsASCIICapable: Настройте на 'YES', если ваша клавиатура использует только символы ASCII; в противном случае установите 'NO'.
- PrefersRightToLeft: Настройте, если ваш язык читается справа налево.
- Первичный язык: Определить языковой код (например, «en-US»).
Также добавьте «Описание использования камеры» только в том случае, если вы включаете функции ввода на основе камеры (редко для клавиатуры).
Понять право на получение OpenAccess
По умолчанию пользовательские клавиатуры не имеют доступа к сети. Если вам нужно загрузить специальные наборы символов или обеспечить облачную синхронизацию, вы должны добавить клавишу «RequestOpenAccess» в разделе «NSExtensionAttributes» в «Info.plist» и установить ее на «YES». Однако Apple внимательно рассматривает приложения, которые запрашивают открытый доступ. Для клавиатуры, ориентированной на автономные специальные символы, пропустите этот ключ, чтобы избежать проблем с доверием пользователей.
Создайте базовый UI
Метод «viewDidLoad» внутри «KeyboardViewController» - это то, где вы настраиваете макет клавиатуры. Вы можете использовать раскадровку или программно создавать интерфейс. Для сложной компоновки со многими специальными символами программный интерфейс предлагает лучший контроль над динамическими размерами и ограничениями Auto Layout.
override func viewDidLoad() {
super.viewDidLoad()
// Set up the main container view
let stackView = UIStackView()
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.spacing = 4
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
NSLayoutConstraint.activate([
stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 4),
stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -4),
stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 4),
stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -4)
])
}
Эта минимальная настройка создает вертикальный стек, который будет содержать ряды ключей.
Разработка клавиатуры для специальных персонажей
Специальные клавиатуры требуют тщательной организации. Пользователям нужно быстро находить символы, не охотясь за бесконечными ключевыми страницами. Начните с группировки символов в логические категории:
- Символы валюты : $, €, £, ¥, ⁇ , ⁇
- Математические знаки: +, -, ×, ÷, =, ≠, ≈, ±, √, ∞, ⁇
- Варианты пунктуации: ..., —, —, •, ‹, ›, «, »
- Акцентированные буквы: á, é, í, ó, ú, ü, ñ, ç
- Стрелы и направленность: ←, →, ↑, ↓, ⁇
Внедрить два или три слоя компоновки: основной слой алфавита с переключателем для перехода на слой символов и, возможно, вторичный слой с менее распространенными символами. Используйте выделенный ключ (например, «123» или «#+=») для переключения между слоями. Каждый слой представляет собой отдельную коллекцию просмотров строк, которые вы можете поменять через свойство «inputView» или скрывая / показывая просмотры.
Дальний пресс-жест для дополнительных персонажей
Если ваша клавиатура отображает стандартную компоновку QWERTY, пользователи ожидают, что длинное нажатие покажет варианты символов. Например, долгое нажатие клавиши «E» показывает «é», «è», «ê», «ë». Реализуйте это, добавив «UILongPressGestureRecognizer» к каждой клавише. При запуске представьте всплывающее окно над клавишей с доступными вариантами. Всплывающее окно должно быть отклонено, когда пользователь поднимает палец или нажимает один из вариантов.
Клавиатура системы Apple использует внутренний механизм, но для вашего расширения вы можете использовать «UIView», который выглядит как плавающий пузырь. Убедитесь, что всплывающее окно не выходит за пределы безопасной области и что оно уважает ориентацию устройства.
Код Snippet: добавление длинного нажатия в ключ
let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
longPress.minimumPressDuration = 0.3
keyButton.addGestureRecognizer(longPress)
Внутри обработчика отследите состояние «.began», «.changed» и «.ended», чтобы показать, обновить и выбрать из всплывающего окна.
Размер и пространство ключа
Устройства iOS различаются по ширине экрана. Используйте пропорциональные размеры: 10-12 клавиш в строку на iPhone и чуть больше на iPad. Каждый ключ должен быть не менее 28 точек в высоту, чтобы соответствовать рекомендациям Apple по человеческому интерфейсу для сенсорных целей. Установите ограничения, чтобы клавиши соответствующим образом сжимались на меньших экранах. Для специальных символов убедитесь, что символы четко видны; используйте размер шрифта 16-18 точек для ключевых меток.
Обработка ввода с помощью текстового документа Proxy
Когда пользователь нажимает на клавишу, клавиатура должна вставить символ в текстовое поле, ориентированное на данный момент. Это делается через объект textDocumentProxy, экземпляр UITextDocumentProxy. Прокси предоставляет такие методы, как insertText( :)', deleteBackward()' иadjustTextPosition(byCharacterOffset:)'.
Для специальных символов часто требуется вставлять многобайтовые глифы (например, эмодзи или комбинирование диакритических знаков). Они обрабатываются правильно «вставитьText», если вы проходите правильную строку Unicode. Например, чтобы вставить акцентированный символ «é», назовите «proxy.insertText» («é»). Для сочетания акцента, такого как «e» с комбинацией острого акцента (U + 0301), вы вставите оба символа: «proxy.insertText ( «e\u{0301}»)».
Обработка Shift и Caps Lock
Внедряйте управление состоянием сдвига для переключения между строчными и строчными буквами и необязательно символами верхнего регистра. Когда ключ сдвига активен, ваша клавиатура должна отображать варианты строчных букв. Для специальных символов, которые имеют корпус (например, греческие буквы), обеспечивают оба. Для символов без корпуса состояние сдвига можно игнорировать или использовать для отображения альтернативных символов (например, клавиша сдвига + число часто показывает символ выше номера).
Используйте булевое свойство "shiftActive" для отслеживания состояния. Когда пользователь нажимает клавишу переключения, переключает ее и перезагружает клавиши. Для блокировки крышек, обнаруживайте двойной нажатие на клавишу переключения; включите состояние постоянных крышек и покажите индикатор (например, подчеркнутый ключ переключения).
Удалить и Cursor Control
Включите ключ удаления, который вызывает proxy.deleteBackward()'. Для клавиатуры специальных символов пользователям может потребоваться быстро удалить целые слова. Вы можете реализовать действие "delete word" позвонив в цикл или используя метод "adjustTextPosition" для перемещения курсора назад по границам слов, а затем удаляя. Однако Apple ограничивает, насколько вы можете манипулировать курсором через "adjustTextPosition" по причинам конфиденциальности; вы не можете читать текст вокруг курсора.
Для перемещения курсора вперед или назад используйте кнопки «proxy.adjustTextPosition» (byCharacterOffset: 1) и «-1». Это используется для кнопки «следующее пространство» или «предыдущее пространство», если вы решите включить одну.
Включение и тестирование расширения клавиатуры
Тестирование симулятора
В Xcode запустите приложение-контейнер на симуляторе. Затем перейдите в Настройки > General > Клавиатура > Клавиатура > Добавить новую клавиатуру и выберите расширение клавиатуры под секцией «Третья сторона клавиатуры». Возможно, вам придется переключиться на клавиатуру, нажав значок глобуса, когда текстовое поле активно. Отладка расширений клавиатуры в симуляторе может быть сложной, потому что точки останова не всегда могут запускать. Используйте утверждения «NSLog» или «печатать» и проверьте выход консоли.
Испытание физического устройства
Тестирование устройств имеет важное значение, потому что симулятор не полностью эмулирует все поведение iOS (например, ограничения высоты клавиатуры, автокоррекция). Установите приложение контейнера на устройство через профиль обеспечения разработки. Затем включите клавиатуру из настроек. Используйте функцию прикрепления Xcode к процессу Прикрепление к функции обработки: в навигаторе отладки выберите имя процесса вашего расширения (например, «SpecialCharKeyboard»).
Общие вопросы
- Клавиатура не отображается : Убедитесь, что расширение включено должным образом и право «Запрос Открытого Доступа» соответствует вашим потребностям. Также проверьте, что «Основной класс» в «Info.plist» указывает на ваш «Контроллер KeyboardView».
- Планировка не правильной величины: Переопределите «viewWillLayoutSubviews» в «KeyboardViewController» и обновите ограничение высоты обзора. Клавиатура должна соответствовать ожидаемой высоте системы (обычно от 216 до 330 точек на iPhone и больше на iPad).
- Ввод не регистрируется: Убедитесь, что вы вызываете «вставитьтекст» на правильный прокси-объект. Прокси-сервер доступен, как только клавиатура активна.
Конфиденциальность и пользовательские разрешения
Настраиваемые клавиатуры являются предметом озабоченности для конфиденциальности пользователей. Apple требует, чтобы клавиатуры не собирали, не передавали и не хранили данные нажатия клавиш без явного согласия пользователя. Следующие рекомендации имеют решающее значение:
- Никаких сетевых вызовов: Если у вас не включен «RequestOpenAccess» и пользователь не дает разрешения, ваше расширение не может делать сетевые запросы.Даже при открытом доступе вы должны раскрывать сбор данных в политике конфиденциальности.
- Никакого доступа к буферу обмена : Ваша клавиатура не может читать системный буфер обмена. Только хост-приложение может получить доступ к буферу обмена, и только когда приложение активировано.
- Никакой аналитики нажатий клавиш : Вы не можете войти в систему, какие клавиши нажаты. Если вам нужно изучить предпочтения пользователей (например, часто используемые символы), храните эти данные только локально с четким объяснением и опцией отказа.
- Предоставьте переключатель для сбора данных : Если ваша клавиатура использует сеть для специальных обновлений символов, включите переключатель в приложение-контейнер, чтобы включить / отключить его, и уважайте выбор пользователя.
Когда пользователи включают клавиатуру, iOS отображает предупреждение о том, что клавиатура может собирать все нажатия клавиш. Отзывы и рейтинги вашего приложения будут страдать, если пользователи почувствуют, что их данные находятся под угрозой. Будьте честны и прозрачны в описании App Store и внутри приложения-контейнера.
Советы по дизайну для доступа к специальным персонажам
Организуйте символы для закона Фиттса
Разместите наиболее часто используемые специальные символы рядом с центром клавиатуры или на нижнем ряду для более легкого охвата большого пальца. Например, если ваша целевая аудитория часто вводит валюту, поместите $, € и £ на домашний ряд символов слоя. Группируйте похожие символы вместе, чтобы уменьшить когнитивную нагрузку.
Используйте визуальную обратную связь
При нажатии клавиши, покажите краткое всплывающее окно (например, предварительный просмотр символа системной клавиатуры), чтобы подтвердить ввод. Это особенно полезно для крошечных символов. Внедрите пользовательский «UIControl» для каждой клавиши, которая реагирует на событие касания и отображает увеличенную версию символа над ключом.
Включите функцию автоматического продвижения символов
После вставки специального символа многие пользователи ожидают, что клавиатура автоматически вернется к слою букв. Можно переключать это поведение с опцией в приложении-контейнере. Это ускоряет набор смеси букв и символов.
Поддержка доступности
Убедитесь, что VoiceOver может читать все клавиши. Установите «ярлык доступности» на каждой кнопке клавиши символа или его имени (например, «звездочка» для *). Для символьных клавиш, где глиф не очевиден, предоставьте устное описание. Также поддерживает динамический тип, чтобы пользователи с большими настройками текста могли четко видеть символы.
Дополнительные соображения
Оптимизация производительности
Расширения клавиатуры работают в среде с ограниченным объемом памяти. Избегайте загрузки тяжелых изображений или сложных анимаций. Используйте легкие подклассы «UIButton» или «UICollectionView» для эффективного повторного использования. На старых устройствах рендеринг полной сетки из 30 + клавиш должен быть гладким. Профилируйте свое расширение с помощью Инструментов, чтобы проверить падение кадров.
Локализация
Если ваша клавиатура поддерживает несколько языков, рассмотрите возможность предоставления локализованных наборов символов. Например, французскому пользователю может потребоваться «, в то время как немецкому пользователю нужен ß и Ä, Ö, Ü. Используйте клавишу «PrimaryLanguage» в «Info.plist», чтобы намекнуть на язык по умолчанию, но позвольте пользователям переключаться через приложение контейнера. Сохраните выбранный макет в «UserDefaults» с общим набором (используя группы приложений), чтобы расширение могло прочитать предпочтение.
App Store Обзор
Apple рассматривает пользовательские расширения клавиатуры более строго, чем обычные приложения. Убедитесь, что ваша клавиатура не сбивается, не включает оскорбительный контент и не обходит системные ограничения. Избегайте рекламных баннеров или рекламных наложений на самой клавиатуре. Если ваша клавиатура требует доступа к сети по какой-либо причине, будьте готовы оправдать это во время процесса обзора.
Обновления и техническое обслуживание
Новые версии iOS могут изменить то, как расширения клавиатуры взаимодействуют с системой. Проверьте свое расширение на бета-версиях и обновите реализацию метода «UIInputViewController» по мере необходимости. Например, iOS 16 представила новые API-интерфейсы для макета клавиатуры для более высоких клавиатур на iPad. Следите за заметками о выпуске Apple.
Заключение
Внедрение пользовательской клавиатуры со специальными символами на iOS - это мощный способ повысить эффективность набора текста для пользователей, которым нужны символы, акцентированные буквы или смайлики, которые системная клавиатура не всплывает сразу. Создав расширение клавиатуры с тщательно продуманными макетами, интуитивно понятным доступом на длинном жиме и надежной обработкой ввода, вы можете обеспечить бесшовный опыт. Приоритет конфиденциальности, соблюдение рекомендаций Apple и тщательное тестирование на реальных устройствах для обеспечения надежности. При правильном дизайне ваша пользовательская клавиатура может стать важным инструментом для многоязычных пользователей, разработчиков, писателей и всех, кто часто вводит нестандартные символы.
Для дальнейшего чтения, обратитесь к официальной документации Apple по Создание пользовательской клавиатуры , Руководство по программированию расширения приложения и Руководство по человеческому интерфейсу для клавиатур .