Ускорьте закрытие клавиатуры или дождитесь завершения

У меня проблема с моей кнопкой сохранения в модальном UINavController. Когда я нажимаю кнопку сохранения, я отключаю клавиатуру, если она все еще активна, проверяю данные из текстовых полей, а затем показываю UIProgressView, пока отправляю свою информацию.

Моя проблема в том, что клавиатура не убирается с дороги достаточно быстро, поэтому клавиатура все еще активна, когда пришло время показать UIProgressView, и он добавляется в нижнюю часть моего представления, и это выглядит глупо.

Я могу нажать клавишу возврата, и клавиатура упадет, затем нажмите «Сохранить», без проблем. Но если пользователь пропускает клавишу возврата на клавиатуре и переходит прямо к верхней правой кнопке сохранения, у меня возникают проблемы.

В идеале я хотел бы реализовать короткое выражение ожидания, чтобы оно исчезло из поля зрения. Или выполните проверку после задержки, но ничего из того, что я пробовал, не работает. Пожалуйста помоги.

Пример кода:

// end edit mode - should kill all keyboards
[[self.tableView superview] endEditing:YES]; 

// make sure everything is entered correctly and validates
[self validateEntryFields]; // keyboard not gone when this finishes

if (valid) { // progress view shows up towards bottom of view
    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
    HUD.delegate = self;
    HUD.labelText = @"Adding User";
    HUD.detailsLabelText = @"Please Wait";
    [HUD showWhileExecuting:@selector(sendNewUserInformation) onTarget:self withObject:nil animated:YES];
}

person Bill Burgess    schedule 29.11.2011    source источник


Ответы (2)


Вы можете использовать уведомление с клавиатуры (это будет более правильное решение, чем по таймеру):

[notificationCenter addObserver: self selector: @selector(keyboardDidHide:) name: UIKeyboardDidHideNotification object: nil];

И покажите свой прогресс в keyboardDidHide: методе.

person brigadir    schedule 29.11.2011
comment
Но я не хочу, чтобы они экономили, если просто убивают клавиатуру. Я согласен, это чистое решение. Я посмотрю что я могу сделать. - person Bill Burgess; 29.11.2011
comment
Это не совсем то, как я надеялся реализовать, но у меня это сработало. И я согласен с другими комментариями, так надо делать. Спасибо. - person Bill Burgess; 29.11.2011

Если небольшая задержка будет работать, вы можете попробовать следующий код между вашей проверкой и оператором if, где вы решаете, будете ли вы показывать представление прогресса.

Вы можете использовать объект NSTimer:

[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(mumboJumbo:)userInfo:nil repeats:NO];

И добавьте свой код в такой метод, как:

-(void)mumboJumbo:(id)sender{
    HUD = [[MBProgressHUD alloc] initWithView:self.view];
    [self.view addSubview:HUD];
    HUD.delegate = self;
    HUD.labelText = @"Adding User";
    HUD.detailsLabelText = @"Please Wait";
    [HUD showWhileExecuting:@selector(sendNewUserInformation) onTarget:self withObject:nil animated:YES];
}

Если я правильно понял вашу проблему, это должно сработать.

person El Developer    schedule 29.11.2011
comment
Я бы дал вам +1 за включение в код ерунды, но метод уведомления с клавиатуры чище :( - person jrtc27; 29.11.2011