2015-05-20 17 views
6

Stiamo osservando un comportamento insolito rispetto a Keyboard willshow & nasconde la notifica su iOS 8.3.Notifiche della tastiera iOS attivate inutilmente in caso di visualizzazione dell'avviso su iOS8.3

Il viewcontroler (per l'ascolto delle notifiche sulla tastiera) ha un file di testo e, dopo aver fatto clic e toccando il pulsante di invio, il metodo innanzitutto si dimette dal primo risponditore dal campo di testo e mostra un avviso per avvisare. Tutto funziona bene, chiude la tastiera e mostra l'avviso come previsto. (chiama anche il metodo UIKeyboardWillHideNotification).

Tuttavia, il 8.3, dopo avere toccato OK/Annulla sul Alertview delegato, ha respinto l'allarme e richiama UIKeyboardWillShowNotification & UIKeyboardWillHideNotification, rispettivamente, anche se non doveva essere chiamato! Non era previsto, poiché la tastiera era già stata scaricata prima di inviare l'avviso!

Ecco il frammento di codice, che stiamo cercando:

- (void)viewDidLoad { 
 

 
    [super viewDidLoad]; 
 

 
    // Do any additional setup after loading the view, typically from a nib. 
 

 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
 

 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
 

 
    } 
 

 
- (IBAction)ShowAlert:(id)sender { 
 

 
    [self.TxtField resignFirstResponder]; 
 

 
    //This woudln't make any diff either :(
 
    [self.view endEditing:YES]; 
 

 
      [self ShowAlertForTest]; 
 

 
} 
 

 

 
-(void)ShowAlertForTest{ 
 

 
    UIAlertView *theAlertView= [[UIAlertView alloc]initWithTitle:@"Title" 
 

 
                 message:@"msg" 
 

 
                 delegate:self 
 

 
               cancelButtonTitle:@"Cancel" 
 

 
               otherButtonTitles:@"Yes", nil]; 
 

 
    [theAlertView show]; 
 

 
} 
 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
 
{ 
 
    NSLog(@"buttonIndex = %ld",buttonIndex); 
 
} 
 

 
- (void)keyboardWillShow:(NSNotification *)aNotification 
 
{ 
 
    NSLog(@"keyboardWillShow"); 
 
} 
 

 

 
- (void)keyboardWillHide:(NSNotification *)aNotification 
 
{ 
 
    NSLog(@"keyboardWillHide"); 
 
}

Questo comportamento sta causando problemi nella nostra applicazione, quando ci sono cascata avvisi attivati ​​dal precedente delegato alertview'd - fanalino la tastiera in situazioni non necessarie.

Qualsiasi aiuto/consiglio è molto apprezzato!

+0

Avete bisogno supportare versioni inferiori a 8? Altrimenti, UIAlertView è deprecato e potresti avere più successo con [UIAlertController] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAlertController_class/) – Yaser

+0

Sì @Yaser, stiamo supportando iOS7 pure! – My3

risposta

1

La mia squadra ha risolto il problema semplicemente annullando l'iscrizione alle notifiche della tastiera prima di presentare la vista di avviso e di iscriversi nuovamente a tali notifiche dopo che la vista di avviso era stata chiusa. Non ideale, ma ha risolto il problema per noi.

2

Nel nostro caso la tastiera è stata nascosta manualmente dall'app (ad esempio quando l'utente tocca Accedi, nascondiamo la tastiera e chiamiamo l'API di accesso al server). In caso di fallimento l'app presenta UIAlertView con un messaggio di errore. Quando l'utente chiude l'avviso, i post di iOS saranno nascosti/nascosti. & mostra/mostra le notifiche. Ovviamente la tastiera non viene mostrata & nascosta durante questa sequenza, perché è già nascosta dall'app.

Tuttavia, abbiamo notato che non nascondendo la tastiera manualmente, ma permettendo a iOS di farlo per noi, risolve il problema. Così, la tastiera è nascosta automaticamente in due casi:

  1. quando UIAlertView è mostrato
  2. quando controller di vista è deallocata

Nota: la tastiera viene visualizzato automaticamente quando UIAlertView è respinto.

0

Nel mio caso l'utente fa clic sul pulsante di accesso, quindi chiamo;

[self.view endEditing: YES]; 
//server request here and in completion/fail alert. 

tastiera era chiuso, alertview è mostrato bene, ma su Annulla/apply tastiera click è stato dimostrato a più disappeared.But il problema è stato questo stava accadendo a volte, se la richiesta di server richiede tempo problema non si vede, se Alertview viene mostrato immediatamente il problema ancora lì. Quindi ho deciso di chiamare i miei avvisi con ritardo. Mettere il ritardo in allerta è risolto il mio problema. Spero che questo ti aiuti.

0

Ho appena risolto un problema simile. La tastiera continua a popup dopo che l'avviso è stato eliminato. Sembra un bug di Apple. Ti consiglio di utilizzare UIAlertController anziché UIAlertView. Si eviterà un sacco di potenziali problemi C'è una soluzione semplice: se si utilizza UIAlertController, si può semplicemente impostare l'animato su NO

[self presentViewController:alert animated:NO completion:nil]; 

farmi sapere se è risolto il problema