UIAlertView显示键盘,无法解除它

时间:2015-04-22 22:04:29

标签: ios objective-c keyboard uialertview uialertcontroller

我的应用程序通常在其登录窗口中使用UIAlertView:

self.customAlert = [[IFCustomAlertView alloc] initWithTitle:@"Save Password"
                                                                message:@"¿Do you want the app to remember your password?"
                                                               delegate:self
                                                      cancelButtonTitle:@"OK"
                                                      otherButtonTitles:@"Cancel", nil];

问题是......自从这个alertView出现后我将我的设备更新到iOS8它显示了键盘,我无法忽略它。在iOS7上,这不会发生。

点击发送按钮时,我正在辞退用户和密码的响应者:

-(IBAction)btnSendTapped:(id)sender{
    [self.tfpass resignFirstResponder];
    [self.tfuser resignFirstResponder];
}

我试过了:

[self.view endEditing:YES];

并且在某些alertViews中它确实有效,但在其他情况下却没有。我的AlertViews从来没有文本字段,所以我认为这个键盘没有理由出现。

键盘上的开头按钮也不会隐藏它,所以键盘会阻碍OK和Cancel按钮,我不能在屏幕上做任何事情。

我认为这可能与UIAlertView弃用有关,但我不知道。

我也实施了这些方法:

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return true;
}

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{

    return YES;
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我从this博客

借用解决方案

对我来说,键盘总是在调用alertView.show()时显示。

我的解决方案是使用didPresentALertView方法确保在警报视图弹出后调用此方法。然后我们可以遍历所有UIWindows及其子视图。我通过描述名称检测到它(如果需要,可以使用更准确的方法),只需将其从superview中删除即可。

func didPresentAlertView(alertView: UIAlertView) {
    var tempWindow: UIWindow;
    var keyboard: UIView;

    for var c = 0; c < UIApplication.sharedApplication().windows.count; c++ {
        tempWindow = UIApplication.sharedApplication().windows[c] as! UIWindow
        for var i = 0; i < tempWindow.subviews.count; i++ {
            keyboard = tempWindow.subviews[i] as! UIView

            println(keyboard.description)

            if keyboard.description.hasPrefix("<UIInputSetContainerView") {
                keyboard.removeFromSuperview()
            }
        }
    }
}

希望这是thelp。