Iphone 键盘返回

Iphone 键盘返回,iphone,objective-c,xcode,iphone-sdk-3.0,Iphone,Objective C,Xcode,Iphone Sdk 3.0,我有一个视图名:myplay.h和myplay.m 我的视图包含一个文本字段名txtplay 它包含一个按钮名btnplay 在按钮事件中,我想检查键盘是否打开,然后关闭它 我知道下面的代码 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return TRUE; } 在按钮点击事件中 -(IBAction)btnplayclick:(id)send

我有一个视图名:myplay.h和myplay.m

我的视图包含一个文本字段名txtplay

它包含一个按钮名btnplay

在按钮事件中,我想检查键盘是否打开,然后关闭它

我知道下面的代码

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
   [textField resignFirstResponder];
   return TRUE;
}
在按钮点击事件中

-(IBAction)btnplayclick:(id)sender
{
  [self.txtplay resignFirstResponder];  
  ....
  ....
}

我想要一个全局代码退出。

我认为通用并在任何地方重用代码的最好方法是为UIView创建一个类别:

@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResonder
{
    if (self.isFirstResponder) {        
        return self;     
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResonder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}
@end
然后调用这样的方法:

-(IBAction)btnplayclick:(id)sender
{
  UIView *firstResponder = [self.view findFirstResonder];
  [firstResponder resignFirstResponder];

}

它为我提供了完美的技巧。

我认为,通用并在任何地方重用代码的最佳方法是为UIView创建一个类别:

@implementation UIView (FindFirstResponder)
- (UIView *)findFirstResonder
{
    if (self.isFirstResponder) {        
        return self;     
    }

    for (UIView *subView in self.subviews) {
        UIView *firstResponder = [subView findFirstResonder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}
@end
然后调用这样的方法:

-(IBAction)btnplayclick:(id)sender
{
  UIView *firstResponder = [self.view findFirstResonder];
  [firstResponder resignFirstResponder];

}
它为我完美地完成了这些技巧。

或者只是写一篇文章

  [self.view findAndResignFirstResponder];
或者只是写

  [self.view findAndResignFirstResponder];

在不是第一响应者的UITextField上调用resignFirstResponder是无害的禁止操作

那就去吧:

for (UIView *candidate in self.subview) {
    if ([candidate isKindOfClass:[UITextView class]]) {
        [(UITextView *)candidate resignFirstResponder];
    }
}

在不是第一响应者的UITextField上调用resignFirstResponder是无害的禁止操作

那就去吧:

for (UIView *candidate in self.subview) {
    if ([candidate isKindOfClass:[UITextView class]]) {
        [(UITextView *)candidate resignFirstResponder];
    }
}
试试这个:

[self.view endEditing:YES];
从文档:

招标:

使视图(或其中一个嵌入的文本字段)退出第一响应程序状态

  • (BOOL)endEditing:(BOOL)force
此方法查看当前作为第一响应者的文本字段的当前视图及其子视图层次结构。如果找到一个,它会要求该文本字段辞去第一响应者的职务。如果force参数设置为YES,则不会询问文本字段;它被迫辞职

在iOS 2.0及更高版本中提供

试试这个:

[self.view endEditing:YES];
从文档:

招标:

使视图(或其中一个嵌入的文本字段)退出第一响应程序状态

  • (BOOL)endEditing:(BOOL)force
此方法查看当前作为第一响应者的文本字段的当前视图及其子视图层次结构。如果找到一个,它会要求该文本字段辞去第一响应者的职务。如果force参数设置为YES,则不会询问文本字段;它被迫辞职

在iOS 2.0及更高版本中提供


这一个应该做这项工作,有什么错吗?如果我有30个文本字段,我必须为每个写..这一个应该做这项工作,有什么错吗?如果我有30个文本字段,我必须为每个写。。