Как я могу установить максимальное количество символов в UITextField
iPhone SDK при загрузке UIView
?
ios
objective-c
cocoa-touch
uitextfield
Domness
источник
источник
Ответы:
Хотя у
UITextField
класса нет свойства максимальной длины, эту функцию относительно просто получить, установив текстовые поляdelegate
и реализовав следующий метод делегата:Objective-C
стриж
Перед изменением текстового поля UITextField спрашивает делегата, следует ли изменить указанный текст . На этом этапе текстовое поле не изменилось, поэтому мы берем его текущую длину и длину строки, которую вставляем (либо путем вставки скопированного текста, либо путем ввода одного символа с помощью клавиатуры), за вычетом длины диапазона. Если это значение слишком длинное (более 25 символов в этом примере), вернитесь,
NO
чтобы запретить изменение.При вводе одиночного символа в конце текстового поля
range.location
длина текущего поляrange.length
будет равна 0, поскольку мы ничего не заменяем и не удаляем. Вставка в середину текстового поля просто означает другоеrange.location
, а вставка нескольких символов означает, что в немstring
содержится более одного символа.Удаление отдельных символов или вырезание нескольких символов задается
range
с ненулевой длиной и пустой строкой. Замена - это просто удаление диапазона с непустой строкой.Примечание о сбое "отменить" ошибку
Как упоминается в комментариях, есть ошибка,
UITextField
которая может привести к сбою.Если вы вставляете в поле, но вставка предотвращает вашу реализацию проверки, операция вставки все еще записывается в буфер отмены приложения. Если вы затем отмените отмену (встряхивая устройство и подтвердив отмену),
UITextField
попытка заменить строку, которую он считает вставленной в себя, пустой строкой. Это приведет к сбою, потому что он никогда не вставлял строку в себя. Он попытается заменить часть строки, которая не существует.К счастью, вы можете защитить себя
UITextField
от такого убийства. Вам просто нужно убедиться, что диапазон, который он предлагает заменить , существует в его текущей строке. Это то, что делает начальная проверка здравомыслия выше.Swift 3.0 с копией и вставкой работает нормально.
Надеюсь, это полезно для вас.
источник
return newLength <= 25;
UITextField
на iPad iOS 8.1. (+1 к комментарию). Будет ли автор добавить что-то об этом, так как это самый рейтинговый ответ? Я счастлив сделать редактирование, но мое, кажется, регулярно отклоняется! :-)Swift 4
Редактировать: исправлена проблема утечки памяти.
источник
Спасибо, август! ( Сообщение )
Это код, который я закончил, который работает:
источник
return textField.text.length < MAX_LENGTH || range.length != 0;
Чтобы завершить августовский ответ, возможна реализация предложенной функции (см. Делегат UITextField ).
Я не проверял код доминантности , но мой не застревает, если пользователь достиг предела, и он совместим с новой строкой, которая заменяет меньшую или равную.
источник
Вы не можете сделать это напрямую -
UITextField
не имеет атрибута maxLength , но вы можете установитьUITextField's
делегат, а затем использовать:источник
Часто у вас есть несколько полей ввода с различной длиной.
источник
Лучше всего было бы настроить уведомление об изменении текста. В вашем
-awakeFromNib
методе контроллера view вы захотите:Затем в том же классе добавить:
Затем подключите розетку
myTextField
к вашему,UITextField
и она не позволит вам добавить больше символов после того, как вы достигнете предела. Обязательно добавьте это в ваш метод dealloc:источник
Я создал этот подкласс UITextFieldLimit:
Возьмите
UITextFieldLimit.h
иUITextFieldLimit.m
из этого репозитория GitHub:https://github.com/JonathanGurebo/UITextFieldLimit
и начинай тестировать!
Отметьте созданный вами раскадровку UITextField и свяжите его с моим подклассом с помощью Identity Inspector:
Затем вы можете связать его с IBOutlet и установить лимит (по умолчанию 10).
Ваш файл ViewController.h должен содержать: (если вы не хотите изменять настройку, например ограничение)
Ваш файл ViewController.m должен
@synthesize textFieldLimit
.Установите ограничение длины текста в вашем файле ViewController.m:
Надеюсь, класс поможет вам. Удачи!
источник
Этого должно быть достаточно для решения проблемы (замените 4 на желаемый предел). Просто убедитесь, что добавили делегата в IB.
источник
Используйте расширение ниже, чтобы установить максимальную длину символов a
UITextField
иUITextView
.Swift 4.0
UITextView
Вы можете установить предел ниже.
источник
Я моделирую фактическую замену строки, которая должна произойти, чтобы вычислить длину этой будущей строки:
источник
Версия Swift 3 // ***** Это не будет работать с Swift 2.x! ***** //
Сначала создайте новый файл Swift: TextFieldMaxLength.swift, а затем добавьте следующий код:
а затем вы увидите в раскадровке новое поле (максимальная длина) при выборе любого TextField
если у вас все еще есть вопросы, проверьте эту ссылку: http://www.globalnerdy.com/2016/05/18/ios-programming-trick-how-to-use-xcode-to-set-a-text-fields -максимальная длина-зрительно-студия в стиле /
источник
Используя Интерфейсный конструктор, вы можете связать и получить событие «Редактирование изменено» в любой из ваших функций. Теперь туда можно поставить чек на длину
источник
Следующий код похож на ответ sickp, но правильно обрабатывает операции копирования и вставки. Если вы попытаетесь вставить текст, длина которого превышает ограничение, следующий код обрезает текст до предела, а не полностью отказывается от операции вставки.
источник
Существует общее решение для установки максимальной длины в Swift. С помощью IBInspectable вы можете добавить новый атрибут в инспекторе атрибутов XCode.
источник
Чтобы заставить его работать со строками любой длины, я бы предложил изменить функцию на что-то вроде:
источник
Swift 4
источник
guard
?Swift 2.0 +
Прежде всего создайте класс для этого процесса. Давайте назовем это StringValidator.swift.
Затем просто вставьте в него следующий код.
Теперь сохраните класс .....
Применение..
Теперь перейдите к вашему классу viewController.swift и сделайте выходы вашего текстового поля как ..
Теперь перейдите к методу shouldChangeCharactersInRange в текстовом поле и используйте его следующим образом.
Не забудьте установить протокол делегирования / методы текстовых полей.
Позвольте мне объяснить это ... Я использую простой процесс расширения строки, который я написал в другом классе. Теперь я просто вызываю эти методы расширения из другого класса, где они мне нужны, добавляя проверку и максимальное значение.
Особенности...
Типы ...
containsOnlyCharactersIn // Принимает только символы.
containsCharactersIn // Принимает комбинацию символов
doesNotContainsCharactersIn // Не будет принимать символы
Надеюсь, что это помогло .... Спасибо ..
источник
Swift 3.0
Этот код работает нормально, когда вы вставляете строку больше, чем ваши ограничения символов.
Спасибо за ваши голоса. :)
источник
Я даю дополнительный ответ на основе @Frouo. Я думаю, что его ответ - самый красивый способ. Потому что это общий контроль, который мы можем использовать повторно.
источник
Это правильный способ обработки максимальной длины в UITextField, он позволяет клавише возврата выходить из текстового поля в отставку в качестве первого респондента и позволяет пользователю возвращаться, когда они достигают предела.
источник
Как насчет этого простого подхода. Это работает нормально для меня.
Затем:
источник
Другие ответы не обрабатывают случай, когда пользователь может вставить длинную строку из буфера обмена. Если я вставлю длинную строку, она должна быть обрезана, но показана. Используйте это в вашем делегате:
источник
Получил до 1 строки кода :)
Установите для делегата вашего текстового представления значение «self», затем добавьте
<UITextViewDelegate>
в свой .h и следующий код в свой .m .... вы можете настроить число «7» таким, каким вы хотите, чтобы ваше МАКСИМАЛЬНОЕ количество символов было.Этот код учитывает ввод новых символов, удаление символов, выбор символов, затем ввод или удаление, выбор символов и обрезку, вставку в целом, а также выбор символов и вставку.
Выполнено!
В качестве альтернативы, другой классный способ написать этот код с битовыми операциями будет
источник
Я открыл исходный код подкласса UITextField, STATextField , который предлагает эту функциональность (и многое другое) со своим
maxCharacterLength
свойством.источник
Теперь, сколько символов вы хотите просто дать значения
источник
Используйте этот код здесь RESTRICTED_LENGTH - длина, которую вы хотите ограничить для текстового поля.
источник
Я сделал это в Swift для ограничения в 8 символов при использовании цифровой клавиатуры.
Я должен был проверить строку! = "", Чтобы кнопка удаления работала на цифровой клавиатуре, иначе это не позволило бы удалить символы в текстовом поле после того, как оно достигло максимума.
источник
Для Ксамарина:
источник
Я реализовал расширение UITextField, чтобы добавить к нему свойство maxLength.
Он основан на IBInspectables Xcode 6, поэтому вы можете установить ограничение maxLength в Интерфейсном компоновщике.
Вот реализация:
источник