显示具有UITextField的UIAlertController而不关闭键盘

时间:2015-07-29 09:43:07

标签: ios keyboard textview uitextview uialertcontroller

我尝试了一个非常简单的例子。我在视图控制器的视图中添加了一个文本视图和一个按钮。按下按钮时,它会显示带有文本字段的警报视图。

我的问题如下:

假设我正在编辑文本视图并按下按钮以显示警报视图。键盘将首先解除(文本视图辞职第一响应者)然后再次出现(文本字段成为第一响应者)。这真的很烦人。我想知道我是否可以做某些事情,这样当我从文本视图切换到文本字段时,键盘不会被忽略和停留。谢谢大家。

以下是这个简单示例的一些代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Text view
    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)];
    textView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:textView];

    // Button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(100,500, 200, 100);
    [button setTitle:@"Show alert view" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

-(void)buttonPressed {
    UIAlertController *ac = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}];
    [ac addAction:cancelAction];
    [ac addTextFieldWithConfigurationHandler:^(UITextField *textField) {}];
    [self presentViewController:ac animated:YES completion:nil];
}

2 个答案:

答案 0 :(得分:0)

基于这个答案:Keyboard hide and show again...

我认为您可以在.m文件的末尾添加这些行,它应该可以完成这项工作!

// UI AlertController Category
@interface UIAlertController (NonFirstResponder)
@end

@implementation UIAlertController (NonFirstResponder)
- (BOOL)canBecomeFirstResponder
{
    return NO;
}
@end

// UIAlertAction Category
@interface UIAlertAction (NonFirstResponder)
@end

@implementation UIAlertAction (NonFirstResponder)
- (BOOL)canBecomeFirstResponder
{
    return NO;
}
@end

答案 1 :(得分:-1)

实施UITextFieldDelegate Protocol并将此方法添加到您的控制器:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
 {
      return NO;
 }

这可以防止键盘被解雇。