来自Keyboard AccessoryView按钮的ResignFirstResponder

时间:2010-12-03 16:30:14

标签: cocoa-touch ios

在我的视图中我有3个UITextField,我为每个人创建了一个keyboardView for keyboard,如apple所述。

在我的附件中,我添加了一个必须调用“CloseKeyboard”功能的按钮。在这个函数中,我无法找到一种方法来拦截键盘正在写入的UITextField,我需要在其上调用ResignFristResponder。

要在一个字段上添加accessoryView,我编写了该代码

if (field1.inputAccessoryView == nil) {
    field1.inputAccessoryView = [self createInputAccessoryView];   
}
if (field2.inputAccessoryView == nil) {
    field2.inputAccessoryView = [self createInputAccessoryView];   
}
if (field3.inputAccessoryView == nil) {
    field3.inputAccessoryView = [self createInputAccessoryView];   
}

这里是createInputAccessory函数:

-(UIView *)createInputAccessoryView {

    CGRect accessFrame = CGRectMake(0.0, 0.0, 20.0, 55.0);

    UIView *inputAccessoryView = [[UIView alloc] initWithFrame:accessFrame];

    UIButton *compButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    compButton.frame = CGRectMake(250.0, 10.0, 60.0, 40.0);

    [compButton setTitle: @"Close" forState:UIControlStateNormal];

    [compButton addTarget:self action:@selector(CloseKeyboard:)

                        forControlEvents:UIControlEventTouchUpInside];

    [inputAccessoryView addSubview:compButton];

return inputAccessoryView; }

如何实现“CloseKeyboard”功能,以便能够从活动的UITextField中resignFirstResponder?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

从iOS 2.0及更高版本开始,有一种简单的方法可以在不必跟踪当前活动控件或迭代所有可用控件或使用UITextFieldDelegate的情况下关闭键盘。

[self.view endEditing:YES]

来自文档:

  

endEditing:

     

使视图(或其中一个嵌入的文本字段)成为   辞去第一响应者的身份。

       - (BOOL)endEditing:(BOOL强制

     

<强>参数
  
  指定YES以强制第一响应者辞职,无论其是否愿意   所以。

  返回值
  YES如果视图已退出第一响应者状态,或NO如果不是。{

     

<强>讨论
  此方法查看当前视图及其子视图   当前第一个响应者的文本字段的层次结构。如果   它找到一个,它要求文本字段作为第一响应者辞职。如果   force参数设置为YES,文本字段永远不会被询问;   它被迫辞职。

答案 1 :(得分:0)

作为第一个解决方案,我尝试使用此实现,每次我强制每次field1成为firstResponder而不是我重新签名。

-(void) closeFunction:(id)sender{   
    [field1 becomeFirstResponder];
    [field1 resignFirstResponder];
}  

但这是一个解决方案......不是解决方案:P