iOS 15 — Присвоение символьного текста unicode полю UITextField, в котором значение isSecureTextEntry равно true, работает не так, как ожидалось

#swift #objective-c #unicode #uitextfield #ios15

Вопрос:

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

В этом также есть поддержка backspace. Когда текстовое поле становится первым ответчиком, символ юникода @»u200B» добавляется в текст текстового поля.

Моя проблема в том, что он отлично работает до iOS 14, но не в iOS 15, символ юникода в защищенном текстовом поле принимает его как символ и отображает текст в текстовом поле.

Проблема возникает только в том случае, если текстовое поле допускает безопасный ввод текста.

Ниже приведен код, который я использовал в демонстрационном проекте, чтобы показать проблему:

 - (void)viewDidLoad {
    [super viewDidLoad];

    [txtUser setSecureTextEntry:false];
    [txt1 setSecureTextEntry:true];

    txtUser.text = @"u200B";
    txt1.text = @"u200B";
 

}

В приведенном выше коде пользователь TXT не разрешает безопасный ввод текста, но txt1 разрешает безопасный ввод текста.

Ниже приведены скриншоты как iOS 14, так и 15:

Результат iOS 14:

Нормально: https://i.stack.imgur.com/l2ZPd.png

Смешанные слои цветов: https://i.stack.imgur.com/XupKH.png

Результат iOS 15:

Нормально: https://i.stack.imgur.com/Wtj46.png

Смешанные слои цветов: https://i.stack.imgur.com/MB33H.png

Я хочу получить тот же результат в iOS 15, что и в iOS 14. Я искал так много решений, но пока не нашел правильного!

Спасибо!!