Accelerare di congedo tastiera o attendere finché non è finito
-
25-10-2019 - |
Domanda
Sto avendo un problema con il mio pulsante Salva in un UINavController modale. Quando si preme il pulsante Salva, sto respingendo la tastiera, se è ancora in piedi, convalida dei dati dai campi di testo, quindi mostrando un UIProgressView mentre io mando il mio informazioni fuori.
Il mio problema è che la tastiera non è sempre fuori del modo abbastanza veloce, quindi la tastiera è ancora quando è il momento di mostrare l'UIProgressView ed è sempre aggiunto verso il fondo del mio punto di vista e sembra stupido.
I può premere il tasto di ritorno, e la tastiera gocce, quindi premere Salva, nessun problema. Ma se l'utente salta il tasto Invio della tastiera e va a destra per la parte superiore tasto destro del risparmio, non ho problemi.
Idealmente mi piacerebbe implementare una breve dichiarazione attesa che scenda fuori dalla vista. O eseguire la mia convalida dopo un ritardo, ma nulla ho provato è di lavoro. Si prega di aiuto.
Esempio di codice:
// 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];
}
Soluzione
È possibile utilizzare la notifica della tastiera (che sarebbe la soluzione più corretta basata su timer):
[notificationCenter addObserver: self selector: @selector(keyboardDidHide:) name: UIKeyboardDidHideNotification object: nil];
E mostrare la vostra vista progressi nel metodo keyboardDidHide:
.
Altri suggerimenti
Se un piccolo ritardo sarebbe si lavora potrebbe provare il seguente codice tra il convalida e la vostra istruzione if in cui si decide se o non si mostra la vista di avanzamento.
È possibile utilizzare l'oggetto NSTimer:
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(mumboJumbo:)userInfo:nil repeats:NO];
e aggiungere il codice in un metodo come:
-(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];
}
Se ho capito bene il problema che dovrebbe funzionare.