Я использую приведенный ниже код, чтобы попытаться обновить textField2
текстовое содержимое для соответствия textField1
, когда пользователь вводит текст textField1
.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
Однако результат, который я наблюдаю, таков ...
textField2 равен «12», когда textField1 равен «123»
textField2 - «123», когда textField1 - «1234»
... когда я хочу:
textField2 равен «123», когда textField1 равен «123»
textField2 - «1234», когда textField1 - «1234»
Что я делаю не так?
ios
objective-c
uitextfield
user265961
источник
источник
Ответы:
-shouldChangeCharactersInRange
вызывается до того, как текстовое поле фактически изменит свой текст, поэтому вы получаете старое текстовое значение. Чтобы получить текст после обновления, используйте:источник
[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]
источник
Swift 3
Основываясь на принятом ответе, в Swift 3 должно работать следующее :
Заметка
У обоих
String
иNSString
есть методыreplacingCharacters:inRange:withString
. Однако, как и ожидалось, первый ожидает экземплярRange
, а второй - экземплярNSRange
. МетодtextField
делегата используетNSRange
экземпляр, поэтомуNSString
в данном случае используется.источник
replacingCharacters
должно бытьstringByReplacingCharactersInRange
Вместо использования UITextFieldDelegate попробуйте использовать событие «Редактирование изменено» для UITextField.
источник
В Swift (4) без
NSString
(чистого Swift):В качестве расширения:
источник
Быстрая версия для него:
источник
Это код, который вам нужен,
источник
использовать охрану
источник
Мое решение - использовать
UITextFieldTextDidChangeNotification
.Не забудьте позвонить
[[NSNotificationCenter defaultCenter] removeObserver:self];
вdealloc
методе.источник
Если вам нужно заменить текст текстового поля на это, вы можете использовать мое решение (Swift 3): https://gist.github.com/Blackjacx/2198d86442ec9b9b05c0801f4e392047
После замены вы можете просто получить
textField.text
составленный текст.источник