2015-05-28 6 views
9

Zaktualizowałem Xcode 6.3 i ios8.3 sprawdź mój kod. to daje mi dziwny wynik.Klawiatura pojawi się automatycznie w ios 8.3 podczas wyświetlania alertview lub alertcontroller

to pierwszy ekran mojej aplikacji demonstracyjnej. tutaj jest jedno pole tekstowe. kiedy wpisuję coś w klawiaturze tekstowej otwartej.

enter image description here

po wpisaniu zakończone. Kliknąłem przycisk Pokaż alert. Wyświetliłem alarm, a wynik będzie następujący.

enter image description here

Po kliknięciu w przycisk Anuluj. Mam wyświetlone inne ostrzeżenie, potem dziwna klawiatura wyniku nie powinna się otwierać, ale kiedy kliknę przycisk anulowania. wyświetl inny alert, a klawiatura pojawi się automatycznie.

tutaj jest obok wyjście z ekranu

enter image description here

Poniżej przedstawiono kod

- (IBAction)MethodShowAlert:(id)sender 
{ 

[tmptxtField resignFirstResponder]; 
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Check Alert textField" message:@"keyboard should not be open" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:nil]; 
[alert show]; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
    { 
    [self showCustomAlertWithTitle:nil]; 
    } 


-(void)showCustomAlertWithTitle:(NSString *)title{ 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Now Check" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; 

     [alertView show] 
    } 

Odpowiedz

15

Tak, to dziwne.

Ale od iOS 8, proponuję użyć UIAlertController zamiast UIAlertView.

Wymień kod z tego:

- (IBAction)MethodShowAlert:(id)sender 
{ 

    [tmptxtField resignFirstResponder]; 

    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:@"Check Alert textField" 
                       message:@"keyboard should not be open" 
                     preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"Cancel" 
                  style:UIAlertActionStyleDefault 
                  handler:^(UIAlertAction *action) { 
                   [self showCustomAlertWithTitle:@"Now Check"]; 
                  }]; 

    [alertController addAction:cancelAction]; 

    [self presentViewController:alertController animated:YES completion:nil]; 
} 


-(void)showCustomAlertWithTitle:(NSString *)title{ 

    UIAlertController * alertController = [UIAlertController alertControllerWithTitle:title 
                       message:nil 
                     preferredStyle:UIAlertControllerStyleAlert]; 

    [self presentViewController:alertController animated:YES completion:nil]; 
} 

Klawiatura nie pokaże po kliknięciu na przycisku.

+0

nie działa dla mnie, iOS 10 :( – ArtStyle

7

To była zmiana w zachowaniu wprowadzona w iOS 8.3. Spróbuj pobrać symulator iOS 8.2, a zobaczysz stare zachowanie.

Efektem mojej analizy był następujący:

  1. Kiedy alarm jest pokazane, że oszczędza klawiaturę aktualnie wyświetlana.
  2. Po zakończeniu usuwania animacji, przywraca poprzednio zapisaną klawiaturę.

Tak więc w jesteś między tymi stanami. Co się dzieje z dwoma alertami wyświetlanymi w tym samym czasie:

  1. Pokaż Alert1. Zapisz widoczną klawiaturę. Ukryj klawiaturę.
  2. Użytkownik klika alert.
  3. Pokaż Alert2. Uratuj, że nie ma klawiatury.
  4. Alert1 kończy odrzucanie animacji. Przywróć zapisaną klawiaturę. Klawiatura jest widoczna.
  5. Użytkownik klika alert.
  6. Alert2 zostaje odrzucony. Przywróć, że nie ma klawiatury. Ukryj klawiaturę.

Moja rekomendacja to użycie metody UIAlertViewDelegate, która jest wywoływana po zakończeniu animacji zamknięcia i wyświetleniu następnego alertu.

+0

Użyłem swoje rozwiązanie to działa. Mam zamiar zaktualizować aplikację w AppStore jest zatwierdzony, czy nie? Bo UIAlertView jest przestarzała. –

+0

Można nadal korzystać z UIAlertView w aplikacjach przesłanych do App Store. Problem z nieaktualnym API: s może przestać działać w przyszłych wydaniach systemu iOS, ale nadal istnieje potrzeba używania UIAlertView w aplikacjach kierowanych na iOS7 – Mats

+0

Miałem ten sam problem, co wspomniałem Interesujący fakt zauważyłem, że jeśli moja klawiatura jest widoczna i klikam przycisk, to po kliknięciu przycisku OK w oknie alertView został wysłany komunikat 'UIKeyboardWillShowNotification' .Próbowałem zrobić' self.resignFirstResponder' ale wciąż było rzucanie tego samego powiadomienie po ostrzeżeniu Widok jest zwalniany. 'activeTextField.endEditing (true)' rozwiązał mój problem! –

19

W moim przypadku chciałem ukryć klawiaturę przed wyświetleniem alertu, aby nie zapisywać klawiatury w pamięci, aby ponownie ją wyświetlić po odrzuceniu jej.

w tym przypadku wystarczy odrzucić klawiaturę, która zajmie domyślny czas animacji do ukrycia, dopiero wtedy należy wyświetlić widok alertu, a następnie nie zapisze tej klawiatury.

należy umieścić wokół 0,6 drugą szczelinę w ukryciu klawiaturę i prezentacji alert

[YOUR_TEXT resignFirstResponder]; 
      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 


        _alertVw = [[UIAlertView alloc] initWithTitle:@"" message:@"message." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 

        [_alertVw show]; 
}); 
+0

oszczędza dużo czasu ... thanx .... i plus 1 –

+0

Zbyt dobry. Dzięki. –

+0

szukałem tego błędu przez wiele godzin! wielkie dzięki, koleś;) – polo987

0

Wymień powiadomienie metodę z poniżej metody.

UIAlertController * alertVC = [UIAlertController alertControllerWithTitle: messege title message: message preferredStyle: UIAlertControllerStyleAlert];

UIAlertAction *cancelAction = [UIAlertAction 
           actionWithTitle:@"OK" 
           style:UIAlertActionStyleCancel 
           handler:^(UIAlertAction *action) 
           { 

           }]; 
[alertVC addAction:cancelAction]; 

[[[[[UIApplication sharedApplication] windows] objectAtIndex:0] rootViewController] presentViewController:alertVC animated:YES completion:^{ 

}]; 
Powiązane problemy