Pregunta

Tengo un problema con mi botón Guardar en un UINAVController modal. Cuando presiono el botón Guardar, descarto el teclado si aún está arriba, validando los datos de los campos de texto y luego mostrando una vista UIPRogressView mientras envío mi información.

Mi problema es que el teclado no se sale del camino lo suficientemente rápido, por lo que el teclado todavía está despierto cuando es hora de mostrar el UIPRogressView y se agrega hacia la parte inferior de mi vista y parece estúpido.

Puedo presionar la tecla de retorno y el teclado cae, luego presione Guardar, sin problemas. Pero si el usuario omite la tecla de retorno del teclado y se dirige a la derecha hacia el botón de guardado superior derecho, tengo problemas.

Idealmente, me gustaría implementar una breve declaración de espera para que abandonara la vista. O realizar mi validación después de un retraso, pero nada de lo que he probado es funcionar. Por favor ayuda.

Ejemplo de código:

// 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];
}
¿Fue útil?

Solución

Puede usar la notificación del teclado (sería una solución más correcta que en base al temporizador):

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

Y muestre su vista de progreso en keyboardDidHide: método.

Otros consejos

Si funcionara un pequeño retraso, puede probar el siguiente código entre su validación y su declaración IF en la que decida si mostrará o no la vista de progreso.

Puede usar el objeto nstimer:

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

Y agregue su código a un método como:

-(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];
}

Si entendí correctamente su problema, eso debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top