@implementation
UIAlertView *query;
@end
- (void)viewWillAppear:(BOOL)animated {
query = [[UIAlertView alloc]
initWithTitle:NSLocalizedString(@"New", @"")
message:nil
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
otherButtonTitles:NSLocalizedString(@"OK", @""), nil];
query.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField *textField = [_query textFieldAtIndex:0];
textField.placeholder = NSLocalizedString(@"Title", @"placeholder text where user enters name for new playlist");
textField.delegate = self;
[_query show];
}
显示UIAlertView
后,键盘也会显示,而UITextfield
是焦点(它只适用于iOS7之前,但在iOS8中不起作用)。我试过了[textfield becomeFirstResponder]
,但它没有用。我创建新项目并使用上面的海湾,它可以工作。
我的问题:键盘没有以UIAlertViewStylePlainTextInput
样式显示。
我不知道为什么?任何人都可以帮助我吗? 感谢。
答案 0 :(得分:18)
这里对陈琳的黑客/修复有一点改进,放在UIAlertViewDelegate中:
- (void)didPresentAlertView:(UIAlertView *)alertView {
if (isIOS8) {
// hack alert: fix bug in iOS 8 that prevents text field from appearing
UITextRange *textRange = [[alertView textFieldAtIndex:0] selectedTextRange];
[[alertView textFieldAtIndex:0] selectAll:nil];
[[alertView textFieldAtIndex:0] setSelectedTextRange:textRange];
}
}
(您必须实现isIOS8方法,属性或iVar。)
答案 1 :(得分:10)
这个丑陋的黑客在打电话给我之后为我工作了:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// HACKHACK: This is to make the keyboard appear in iOS8
UITextRange* textRange = self.textField.selectedTextRange;
[self.textField selectAll:self];
[UIMenuController sharedMenuController].menuVisible = NO;
self.textField.selectedTextRange = textRange;
});
遇到同样的问题,花了几个小时摆弄UIAlertController,这是一个“正确的”解决方案,但遗憾的是在其他地方有一些问题(例如,当从弹出窗口呈现时它会中断),并且不适用于iOS7。 / p>
这绝对是iOS8中的一个错误。我希望Apple尽快解决这个问题。不幸的是,即使使用为iOS7编译的旧二进制文件也能打破它。
答案 2 :(得分:3)
这有助于我解决所有相关问题:
[MyUITextView endEditing:YES];
在显示UIAlertView
之前放置。
答案 3 :(得分:2)
在我的情况下,这种情况正在发生,因为UIViewController
提出的UIAlertView
已经实施了canBecomeFirstResponder
并且结果为是,因为我想要倾听'摇晃'事件
我添加了UIAlertViewDelegate
方法的以下实现后,键盘按预期显示:
- (void)willPresentAlertView:(UIAlertView *)alertView
{
[self resignFirstResponder];
}
所以这可能无法解决这个所谓的“被弃用的”问题。但是要检查控制器是否启用了第一响应者行为。
答案 4 :(得分:0)
对我来说,问题是文本字段已经具有第一响应者状态,因此在调用警报代码时键盘已经可见。解雇此字段可解决问题。
答案 5 :(得分:0)
你是在设备上看到这个,还是只是在sim?
iOS8 sim卡似乎存在问题,它检测到物理键盘,并且不显示软件键盘。可能是故意的,因为你在技术上使用的是物理键盘......这不是sim测试的理想行为。
如果这是您的问题,请尝试使用命令K在SIM卡中切换软件键盘。
答案 6 :(得分:-2)
The first page of the UIAlertView documentation州:
子类注释 UIAlertView类旨在按原样使用,不支持子类化。此视图层次结构 class是私有的,不得修改。
有关外观和行为配置的详细信息,请参阅 “警示意见”。
换句话说,你不应该搞乱UIAlertView窗口的内容。它实际上在iOS 8之前的OS版本中工作的事实只是一个奖励。从iOS 8开始,它已被弃用。
在iOS 8中您要做的是使用brand new UIAlertController class,它允许使用可编辑的文本字段。