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];
}
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top