2015-05-20 25 views
6

Obserwujemy nietypowe zachowanie w odniesieniu do klawiatury. Po wyświetleniu ostrzeżenia & zostanie ukryte powiadomienie w systemie iOS 8.3.Powiadomienia klawiatury systemu iOS zostały niepotrzebnie uruchomione po wyświetleniu alertów na urządzeniach z systemem iOS 8.3

ViewControler (listenig to keyboard notifications) ma textfiled i po kliknięciu i po stuknięciu przycisku submit, metoda najpierw rezygnuje z pierwszej odpowiedzi z pola tekstowego i pokazuje ostrzeżenie informujące o ostrzeżeniu. Wszystko działa dobrze, odrzuca klawiaturę i wyświetla alert zgodnie z oczekiwaniami. (wywołuje również metodę UIKeyboardWillHideNotification).

Jednak po 8, po dotknięciu OK/Cancel na delegacie Alertview, odrzuca alert i wywołuje UIKeyboardWillShowNotification odpowiednio & UIKeyboardWillHideNotification, chociaż nie powinno się go nazywać! Tego się nie spodziewano, ponieważ klawiatura została już zwolniona przed przeniesieniem alarmu!

Oto fragment kodu, który staramy:

- (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"); 
 
}

Takie zachowanie jest przyczyną problemów w naszej aplikacji, gdy nie są kaskadowe alarmy wywoływane z poprzedniego alertview'd delegata - wychowywanie klawiatura w niepotrzebnych sytuacjach.

Każda pomoc/porady są mile widziane!

+0

Czy trzeba do obsługi wersji niższych niż 8? W przeciwnym razie, UIAlertView jest przestarzałe i możesz mieć większy sukces z [UIAlertController] (https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAlertController_class/) – Yaser

+0

Tak @Yaser, wspieramy iOS7 także! – My3

Odpowiedz

1

Mój zespół wykonał pracę, po prostu anulował subskrypcję powiadomień na klawiaturze przed wyświetleniem widoku alertu i ponownie wykupił subskrypcję powiadomień po odrzuceniu widoku alertu. Nie idealne, ale rozwiązało problem dla nas.

2

W naszym przypadku klawiatura została ukryta ręcznie przez aplikację (np. Gdy użytkownik kliknie Zaloguj się, ukrywamy klawiaturę i wywołujemy interfejs API do logowania do serwera). Po niepowodzeniu aplikacja wyświetla komunikat o błędzie w postaci UIAlertView. Gdy użytkownik zamknie alert, posty iOS będą/nie były ukryte: & wyświetli/wyświetli powiadomienia. Oczywiście klawiatura nie jest wyświetlana & ukryta podczas tej sekwencji, ponieważ jest już ukryta przez aplikację.

Zauważyliśmy jednak, że nie ręczne ukrywanie klawiatury, ale pozwolenie iOS, aby to zrobił, rozwiązuje problem. Tak, klawiatura jest automatycznie ukryte w dwóch przypadkach:

  1. gdy UIAlertView pokazano
  2. gdy widok kontroler jest zwalniane

Uwaga: klawiatura jest pokazane automatycznie po UIAlertView zostaje odrzucona.

0

W moim przypadku użytkownik kliknie przycisk logowania, a następnie zadzwonię;

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

klawiatura była zamknięta, alertview pokazano ładnie, ale na anulowanie/zastosowanie kliknij klawiaturę został pokazany ponownie i disappeared.But problem został to się dzieje czasami, jeśli żądanie serwer wymaga czasu problem nie jest widoczne, jeśli Alertview pokazuje się od razu problem. Tak więc zdecydowałem się zadzwonić do moich powiadomień z opóźnieniem. Opóźnienie ostrzeżenia rozwiązało mój problem. Mam nadzieję że to pomoże.

0

Właśnie naprawiłem podobny problem. Klawiatura pozostaje otwarta po usunięciu alarmu. Wygląda na to, że jest to jabłko. Polecam, aby użyć UIAlertController zamiast UIAlertView. Będzie to uniknąć wielu potencjalnych problemów Istnieje proste rozwiązanie: Jeśli używasz UIAlertController, można po prostu ustawić animowane na NO

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

Daj mi znać, jeśli to naprawić problem