IOS 8无法从UITextField中解除键盘

时间:2015-02-01 19:50:53

标签: ios ios8 uitextfield uialertview

我认为我的问题类似于:iOS 8 Keyboard Dismissed delay after modal view controller is dismissed但我不清楚其他帖子如何在我的应用程序中解决它。

在Xcode5 / IOS7中,我展示了一个带有2个UITextField的UIAlertView。用户只需按OK即可继续,或者可以在文本字段中输入密码/确认密码。在IOS7中,当我显示alertview时我隐藏了键盘,当用户点击文本字段时,键盘会自动重新显示:

UIAlertView *startTurnAlert;
UITextField *textField0, *textField1;
startTurnAlert = [[UIAlertView alloc]
                      initWithTitle:[NSString stringWithFormat:@"Player %d, Begin Turn %d",playerNumber, turnNumber]
                      message:[NSString stringWithFormat:@"%@, report for duty!", playerNames[playerNumber] ]
                      delegate:self
                      cancelButtonTitle:@"Exit Game"
                      otherButtonTitles:@"OK",
                                        nil
                      ];
startTurnAlert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

textField0 = [startTurnAlert textFieldAtIndex:0];
textField0.secureTextEntry = YES;
textField0.keyboardType = UIKeyboardTypeDefault;
textField0.placeholder = @"Enter a passcode (optional)";

textField1 = [startTurnAlert textFieldAtIndex:1];
textField1.placeholder = @"Re-enter passcode";
textField0.keyboardType = UIKeyboardTypeDefault;

[startTurnAlert show];
[textField0 endEditing:YES];
[textField1 endEditing:YES];

更新到Xcode 6并构建IOS8后,没有代码更改,键盘永远不会隐藏。我试着添加resignFirstResponder,但没有运气:

[startTurnAlert show];
[textField0 resignFirstResponder];
[textField0 endEditing:YES];
[textField1 resignFirstResponder];
[textField1 endEditing:YES];

那么,在IOS8中,我如何隐藏嵌入在UIAlertview 中的UItextField的键盘,直到用户通过点击文本字段实际指示输入文本的意图?

谢谢!

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,试图隐藏模态弹出窗口中的键盘。 resignFirstResponder只会做什么。

解决方案......是禁用对话框中的所有UITextFields控件(因此iOS无法锁定任何需要键盘的控件),然后重新启动稍后启用相关的那些。

这很烦人,但它有效......

(叹气。)

答案 1 :(得分:1)

我不确定是否有人像我这样的iOS9有同样的问题,但我设法让它以这种方式工作:

  1. 尝试专注于其中一个文本域

    [self.someTextfield becomeFirstResponder];
    
  2. 然后延迟它,然后移除焦点

    double delayInSeconds = 0.5; // set the time
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){  
        [self.someTextfield resignFirstResponder];  
    });
    

答案 2 :(得分:0)

由于它在iOS 7中运行并且您花费了一段时间,我只想实现类似于here问题中的第二个代码块 从if [uialertcontroller class]

开始