альтернатива textFieldDidEndEditing - PullRequest
0 голосов
/ 05 июня 2011

Привет, я использую следующий код, чтобы сохранить 2 UIButtons отключенным, пока не будет данных в четырех UITextField s

- (void)textFieldDidBeginEditing:(UITextField *)textField {


if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];

}
if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){

    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
}

}

- (void)textFieldDidEndEditing:(UITextField *)textField {

int ebtl = [brand.text length];
int eqtl = [qty.text length];
int estl = [size.text length];
int eptl = [price.text length];
NSLog(@"ebtl = %d eqtl = %d estl = %d eptl = %d",ebtl, eqtl, estl, eptl); 

if (([brand.text length] ==0) || ([qty.text length] ==0) || ([size.text length] ==0) || ([price.text length] ==0)){
    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
}
if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];
}

}

Моя проблема в том, что textFieldDidEndEditingне вызывается до тех пор, пока пользователь не коснется текстового поля.это создает необходимость касания экрана, тогда у кнопки есть способ избежать этого, поэтому кнопка будет активирована немедленно?

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Кнопка станет активной только тогда, когда пользователь уходит от textField. Если вы используете обычную всплывающую клавиатуру, используйте кнопку «Готово» на клавиатуре, чтобы избавиться от клавиатуры, а затем напишите IBAction, когда клавиатура подает себя, и затем включите свои кнопки.

- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder]; //enable your buttons after this
return 1;
}

или используйте IBAction:

-(IBAction) textFieldFinishedDone: (id) sender; // enable your buttons after this

Кнопки должны становиться активными только тогда, когда ВСЕ текстовые поля заполнены, верно? Вы можете сделать это. Закомментируйте обе функции, которые вы написали выше. Используйте IBAction и всякий раз, когда вы нажимаете кнопку DONE и переставляете клавиатуру, проверяете все текстовые поля на предмет их статуса. Используя блок if-else, заставьте ваши кнопки появляться, когда все текстовые поля готовы.

0 голосов
/ 05 июня 2011

Для лучшего пользовательского опыта, я бы предложил выполнить поведение в textField:shouldChangeCharactersInRange:replacementString: всегда возвращая YES.

также, логика в вышеприведенных методах избыточна, предпочтительная реализация:

- (void)textFieldDidBeginEditing:(UITextField *)textField {

  if (([brand.text length] >0) && 
      ([qty.text length] >0) && 
      ([size.text length] >0) && 
      ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];
  } else {
    [calcOneButton setEnabled:NO];
    [calcTwoButton setEnabled:NO];
  }

}
...