Я новичок в 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;
}

Я думаю, он не получает значение текстового поля динамически? или же ?

Помогите мне выбраться из этого.

3
Muhammad Burhan 26 Сен 2014 в 11:40

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];
    }
}
1
l0gg3r 26 Сен 2014 в 11:51
1
Спасибо за помощь l0gg3r
 – 
Muhammad Burhan
29 Сен 2014 в 14:11

Если вы хотите получить обновленный текст, вам нужно добавить одну строку в метод 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;
}
1
Anjaneyulu Battula 26 Сен 2014 в 12:41

Вам нужно сначала добавить новую строку в существующий текст, а затем сравнить длину

- (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;
}
0
Hemant Chittora 26 Сен 2014 в 11:50
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range  replacementString:(NSString *)string

Взгляните на название этого метода. Это называется shouldChange, а не hasChanged. Поэтому, когда этот метод вызывается, содержимое текстовых полей еще не обновляется, но вы можете решить, должно ли произойти следующее изменение.

Клаус

0
l0gg3r 26 Сен 2014 в 11:52
Нет ли какого-либо метода делегата, который вызывается после изменения персонажа??
 – 
Muhammad Burhan
26 Сен 2014 в 11:49
Проверьте мой ответ, я также исправил ошибку отключения (если пользователь удаляет обратное текстовое поле)
 – 
l0gg3r
26 Сен 2014 в 11:52