Заполнение UITextField кодом из смс

uitextfield
ios
xcode
swift

#1

Делаю экран для ввода кода из смс и решил добавить автоматическую вставку кода из смс, увидел, что многие делают 4 UITextField’a вместо одного. Так вот вопрос, как мне сделать так, чтобы код вставлялся во все ячейки TextField


#2

Делите код на 4 части и вставляете каждую часть в свою ячейку


#3

В принципе так и подумал. Не подскажите можно ли код из смс сохранить в переменную? Если да, то как. Буду благодарен


#4

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


#5

Да знаю, буду искать. Спасибо за помощь)


#6

Как один из вариантов выхода из вашей ситуации, сделать невидимый textField, в который вы вставите полный код, через делегат отловите заполнение его и после этого вытащите из этого textField ваш код и занесете его в переменную. Таким образом можно будет делать дальше что угодно.


#7

Я почти доделал, осталось только реализовать вашу задумку, если пользователь захочет ввести код вручную(допустим не знает, что можно вставлять), то автоматически не переключится с невидимого tf на тот который нужен(на 1 ячейку). Можно как-то исправить?


#8

Мне кажется все будет работать и так. Вам лишь нужно будет делать проверку в делегате невидимого tf, когда пользователь сам вводит код. Получается при ручном вводе кода, берете текущий код, делите его на 4 части и начинаете заполнять ваши видимые ячейки. Как только следующая часть кода для вставки окажется nil, прекращаете делать вставку.
Аналогично будет работать и при удалении кода, только удалять в вашем случае вы будете по одному символу из невидимого tf. Вся остальная логика в делегате останется без изменений.


#9
if #available(iOS 12.0, *) {
    textField.textContentType = .oneTimeCode
}

Это для чтения кода из СМС