Я новичок в iOS. У меня есть viewcontroller для регистрации, он содержит три UITextfields для электронной почты, пароля, подтверждения пароля и UIButton. У меня есть несколько проверок. При успешной проверке я должен включить кнопку регистрации. Я реализовал его через shouldChangeCharactersInRange , но он возвращает мне старые символы, например.
I type a => It returns me ""
then
I type ab => It returns a
then
I remove b => It returns me ab
На самом деле это:
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length]>0) {
[self enableSignUpButton];
}
return YES;
}
-(void)enableSignUpButton {
if ([emailTextField.text length]>0 && [passwordTextfield.text length]>0 && [confirmPasswordTextfield.text length]>0)
signUpButton.enabled=TRUE;
return;
}
signUpButton.enabled=FALSE;
}
Я думаю, он не получает значение текстового поля динамически? или же ?
Помогите мне выбраться из этого.
4 ответа
Обработать событие изменения текста, подобное этому
- (void)viewDidLoad
{
[super viewDidLoad];
[self.textField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
}
- (void)textFieldDidChange:(UITextField *)aTextField
{
if ([textField.text length]>0)
{
[self enableSignUpButton];
} else {
// NOTE
[self disableSignupButton];
}
}
Если вы хотите получить обновленный текст, вам нужно добавить одну строку в метод shouldChangeCharactersInRange , в котором tempStr будет печатать ваш обновленный текст
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *tempStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"updated Text: %@",tempStr);
if ([tempStr length] > 0) {
[self enableSignUpButton];
}
return YES;
}
Вам нужно сначала добавить новую строку в существующий текст, а затем сравнить длину
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if (newLength>0) {
[self enableSignUpButton];
}
return YES;
}
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
Взгляните на название этого метода. Это называется shouldChange, а не hasChanged. Поэтому, когда этот метод вызывается, содержимое текстовых полей еще не обновляется, но вы можете решить, должно ли произойти следующее изменение.
Клаус
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.