UIAlertView 显示键盘,无法关闭它
UIAlertView displaying keyboard, not able to dismiss it
我有一个应用程序在其登录 Window 中正常使用 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];
问题是...因为我将我的设备更新为 iOS8 每当这个 alertView 出现时它就会显示键盘,我无法关闭它。在 iOS7 这不会发生。
点击发送按钮后,我将退出用户名和密码的响应者:
-(IBAction)btnSendTapped:(id)sender{
[self.tfpass resignFirstResponder];
[self.tfuser resignFirstResponder];
}
我试过:
[self.view endEditing:YES];
在某些 alertView 中它确实有效,但在其他 alertView 中却无效。我的 AlertViews 从来没有文本字段,所以我认为没有理由出现这个键盘。
而且键盘上的介绍按钮没有隐藏它,所以有时 OK 和 Cancel 按钮被键盘挡住了,我在屏幕上什么也做不了。
我认为这可能与 UIAlertView 弃用有关,但我不知道。
我也实现了这些方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return true;
}
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
如有任何帮助,我们将不胜感激。
我从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()
}
}
}
}
希望对你有帮助。
我有一个应用程序在其登录 Window 中正常使用 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];
问题是...因为我将我的设备更新为 iOS8 每当这个 alertView 出现时它就会显示键盘,我无法关闭它。在 iOS7 这不会发生。
点击发送按钮后,我将退出用户名和密码的响应者:
-(IBAction)btnSendTapped:(id)sender{
[self.tfpass resignFirstResponder];
[self.tfuser resignFirstResponder];
}
我试过:
[self.view endEditing:YES];
在某些 alertView 中它确实有效,但在其他 alertView 中却无效。我的 AlertViews 从来没有文本字段,所以我认为没有理由出现这个键盘。
而且键盘上的介绍按钮没有隐藏它,所以有时 OK 和 Cancel 按钮被键盘挡住了,我在屏幕上什么也做不了。
我认为这可能与 UIAlertView 弃用有关,但我不知道。
我也实现了这些方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return true;
}
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
如有任何帮助,我们将不胜感激。
我从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()
}
}
}
}
希望对你有帮助。