键盘没有响应resignFirstResponder(keyboard not responding

2019-06-23 11:21发布

而不是显示所述键盘的我想显示酥料饼视图当选择包含textField(我的代码是在底部)。 如果键盘没有那么显示一切都很正常。 但是,如果键盘显示,然后将文本框选择键盘不会被解雇,某处firstResponders必须迷路,但我不知道在哪里。 有没有人有一个解决的办法?

我的文本字段:

    self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)];
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect];
[self.startDateTextField setDelegate:delegate];
[self.startDateTextField addTarget:delegate action:@selector(editStartDate:) forControlEvents:UIControlEventEditingDidBegin];
[popoverWrapper addSubview:self.startDateTextField];

editStartDate:我有:

-(void)editStartDate:(UITextField *)textField {

[textField resignFirstResponder];

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init];
datePickerVC.delegate = self;

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC];
[self.popoverController setDelegate:self];

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
}

Answer 1:

这是很容易做到的,用你的UITextFieldDelegate方法特别UITextFieldShouldBeginEditing并返回NO并执行代码以显示酥料饼代替。 这样的键盘从未显示开始。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
  [self.view endEditing:YES]; // added this in for case when keyboard was already on screen
  [self editStartDate:textField];
  return NO;
}

它的工作确保你的文本字段的委托设置为self(视图控制器),并在您的editStartDate方法去除resignFirstResponder电话。



Answer 2:

你似乎是辞职文本字段的第一响应; 然而,这并不一定是第一个响应者,这也许可以解释为什么称它没有效果。

相反,你应该使用endEditing类别通过视图的所有儿童改乘辞职从哪个查看它连接到第一个响应:

[self.view endEditing:YES];

在任何情况下,你永远要显示键盘,你可以简单地实现UITextFieldDelegate覆盖默认的行为。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    // Your popover code.

    return NO;
}

UITextFieldDelegate协议参考。



Answer 3:

尝试像这样在你的editStartDate:方法

[self.startDateTextField resignFirstResponder];

编辑:但不是做,当你在文本框单击辞职的键盘,你可以像setInputView对于文本字段,以衬托出popViewController。

DatePickerVC *datePickerVC = [[DatePickerVC alloc] init];
datePickerVC.delegate = self;

self.popoverController = [[UIPopoverController alloc] initWithContentViewController:datePickerVC];
[self.popoverController setDelegate:self];

[self.popoverController presentPopoverFromRect:CGRectMake(0, 0, 5, 5) inView:textField permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

 self.startDateTextField = [[UITextField alloc] initWithFrame:CGRectMake(79, 148, 138, 27)];
[self.startDateTextField setBorderStyle:UITextBorderStyleRoundedRect];
[self.startDateTextField setDelegate:delegate];
self.startDateTextField.inputView = self.popoverController;


Answer 4:

所以,你要立即隐藏键盘选择文本字段后显示别的东西吗?

有两件事我能想到的:

  1. 给文本字段一些时间辞职第一响应之前得到它一起: [textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.5];

  2. 设置inputView文本字段为零或财产UIView有一个明确的背景色。



Answer 5:

如果inputView文本字段没有得到你想要的东西,你也可以简单地把一个看不见的按钮,在顶部UITextField并且只显示从按钮的动作酥料饼。 对于用户而言,它将显示为文本字段长大的酥料饼。 如果在这一点上,键盘仍然存在,呼吁resignFirstResponder所有可能的第一反应(文本字段等等)。



文章来源: keyboard not responding to resignFirstResponder