UIAlertView Vs UIAlertController - без клавиатуры в iOS 8

У меня есть старый проект Xcode, предназначенный для iOS 6 и выше. Недавно я открыл его в Xcode 6 и работал в симуляторе iPhone 6 для iOS 8. Когда я пробовал это действие

UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Folder Name"
                                                     message:@"Keep it short and sweet"
                                                    delegate:self
                                           cancelButtonTitle:@"Cancel"
                                           otherButtonTitles:@"OK", nil];

    dialog.alertViewStyle = UIAlertViewStylePlainTextInput;
    dialog.tag = 400;
    [dialog show];

Я получаю всплывающее окно, но когда я нажимаю на текстовое поле, клавиатура не появляется. Я googled и прочитал, что мне нужно использовать UIAlertController. Так как мне нужно поддерживать версии iOS 6, 7, поэтому я изменил свой код следующим образом.

if ([UIAlertController class])
    {
        // use UIAlertController
        UIAlertController *alert= [UIAlertController
                                      alertControllerWithTitle:@"Enter Folder Name"
                                      message:@"Keep it short and sweet"
                                      preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                   handler:^(UIAlertAction * action){
                                                       //Do Some action here
                                                       UITextField *textField = alert.textFields[0];
                                                       NSLog(@"text was %@", textField.text);

                                                   }];
        UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault
                                                       handler:^(UIAlertAction * action) {

                                                           NSLog(@"cancel btn");

                                                           [alert dismissViewControllerAnimated:YES completion:nil];

                                                       }];

        [alert addAction:ok];
        [alert addAction:cancel];

        [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
            textField.placeholder = @"folder name";
            textField.keyboardType = UIKeyboardTypeDefault;
        }];

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

    }
    else
    {
        // use UIAlertView
        UIAlertView* dialog = [[UIAlertView alloc] initWithTitle:@"Enter Folder Name"
                                                         message:@"Keep it short and sweet"
                                                        delegate:self
                                               cancelButtonTitle:@"Cancel"
                                               otherButtonTitles:@"OK", nil];

        dialog.alertViewStyle = UIAlertViewStylePlainTextInput;
        dialog.tag = 400;
        [dialog show];

    }

Опять же, если я попробую сделать то же самое действие НЕТ клавиатура.

Является ли это ошибкой в ​​симуляторе Xcode 6 или я что-то делаю неправильно?

enter image description here

Ответ 1

Я протестировал это, если iOS8 обнаруживает аппаратную клавиатуру, чем не открывает клавиатуру. Как вы можете тестировать в симуляторе, так что это не отображение любой клавиатуры

Нажмите "Command" + "k", и вы сможете увидеть клавиатуру.

При тестировании на устройстве вы не столкнетесь с этой проблемой, если пользователь не подключил свое устройство с помощью аппаратной клавиатуры Bluetooth, так что вам не о чем беспокоиться.

Надеюсь, что это поможет

Ответ 2

Другой способ увидеть клавиатуру - установить тип клавиатуры. Это может быть пример кода:

UIAlertController* alertController = [UIAlertController
                                     alertControllerWithTitle:@"Test"
                                     message:@"Testing keyboard"
                                     preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler: ^(UITextField *tf)
 {
     tf.autocorrectionType = UITextAutocorrectionTypeYes;
     tf.keyboardType = UIKeyboardTypeDefault;
 }];
[self presentViewController:alertController animated:YES completion:nil];

Затем вы увидите клавиатуру симулятора, когда вы покажете AlertController