UIAlertView的文本字段在iOS8中不显示键盘

nmh*_*nmh 17 ios

@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];
}
Run Code Online (Sandbox Code Playgroud)

UIAlertView显示,键盘也显示并UITextfield是焦点(这只是工作预iOS7,但在iOS8上不工作).我试过了[textfield becomeFirstResponder],但它没有用.我创建新项目并使用上面的海湾,它的工作原理.

我的问题:键盘没有显示UIAlertViewStylePlainTextInput样式.

我不知道为什么?任何人都可以帮助我吗?谢谢.

cet*_*cet 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

(您必须实现isIOS8方法,属性或iVar.)

  • 只是在这个方法中执行[tf selectAll:nil]似乎可以解决问题.适用于7.1和8.1. (4认同)

小智 10

在调用show之后,这个丑陋的黑客为我工作了:

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;
});
Run Code Online (Sandbox Code Playgroud)

遇到同样的问题,并花了几个小时摆弄UIAlertController,这是"正确的"解决方案,但不幸的是在其他地方有几个问题(例如,当从弹出窗口呈现时它会中断),并且不适用于iOS7.

这绝对是iOS8中的一个错误.我希望Apple尽快解决这个问题.不幸的是,它甚至打破了为iOS7编译的旧二进制文件.