而不是显示所述键盘的我想显示酥料饼视图当选择包含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];
}
这是很容易做到的,用你的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电话。
你似乎是辞职文本字段的第一响应; 然而,这并不一定是第一个响应者,这也许可以解释为什么称它没有效果。
相反,你应该使用endEditing
类别通过视图的所有儿童改乘辞职从哪个查看它连接到第一个响应:
[self.view endEditing:YES];
在任何情况下,你永远要显示键盘,你可以简单地实现UITextFieldDelegate
覆盖默认的行为。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
// Your popover code.
return NO;
}
UITextFieldDelegate协议参考。
尝试像这样在你的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;
所以,你要立即隐藏键盘选择文本字段后显示别的东西吗?
有两件事我能想到的:
给文本字段一些时间辞职第一响应之前得到它一起: [textField performSelector:@selector(resignFirstResponder) withObject:nil afterDelay:0.5];
设置inputView
文本字段为零或财产UIView
有一个明确的背景色。
如果inputView
文本字段没有得到你想要的东西,你也可以简单地把一个看不见的按钮,在顶部UITextField
并且只显示从按钮的动作酥料饼。 对于用户而言,它将显示为文本字段长大的酥料饼。 如果在这一点上,键盘仍然存在,呼吁resignFirstResponder
所有可能的第一反应(文本字段等等)。