2012-04-07 67 views
2

而不是显示键盘我想显示弹出视图时,选择了textField(我的代码是在底部)。如果键盘没有显示,那么一切正常。但是,如果键盘正在显示,然后选择了文本框,则键盘不会被解除,某些地方firstResponders必须丢失,但我不知道在哪里。有没有人有解决这个问题?键盘没有响应resignFirstResponder

我的文本框:

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]; 
} 

回答

8

这是很容易做到的,用你的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; 
} 

为它工作,确保您设置文本框的自我(视图控制器),并在您的editStartDate方法委托删除resignFirstResponder电话。

+1

这很好。谢谢。我不能奖赏赏金直到明天,但那么它的全部是你的 – 2012-04-09 23:00:15

+0

拯救我的日子:) – Xeieshan 2014-04-24 11:26:18

0

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

[self.startDateTextField resignFirstResponder]; 

:但 而不是做辞职键盘时当你在textfield中单击时,你可以使用setInputView for Textfield来展现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; 
+0

谢谢您的回答,但显示酥料饼是不是在那里我遇到了问题。我不能让键盘消失。我可能会误解一些东西,但我仍然无法取消键盘 – 2012-04-07 18:05:21

0

因此,你想在文本字段被选中并显示其他内容后立即隐藏键盘?

有两件事我能想到的:

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

  2. 设置文本字段的inputView财产以零背景或清晰的背景色为UIView

-1

如果inputView文本字段没有得到你想要的东西,你也可以简单地把一个看不见的按钮上UITextField的顶部,只显示从按钮的动作酥料饼。对用户来说,它将显示为文本字段带来了弹出窗口。如果此时键盘仍然存在,请在所有可能的第一响应者(文本字段等)上致电resignFirstResponder

1

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

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

[self.view endEditing:YES]; 

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

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

    return NO; 
} 

UITextFieldDelegate Protocol Reference.