我有相当多的控件分散在我的表格中的许多表格单元格中,我想知道是否有一种更简单的方法来消除键盘,而不必循环遍历所有的控件并将它们全部辞职为第一响应器。我想问题是…我如何得到当前的第一个响应器的键盘?


当前回答

Try:

[self.view endEditing:YES];

其他回答

下面是我在代码中使用的代码。它像魔法一样有效!

在yourviewcontroller.h中添加:

@property(非atomic) UITapGestureRecognizer * taprenizer;

现在在.m文件中,将这个添加到你的ViewDidLoad函数中:

- (void)viewDidLoad {
    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}

同样,在.m文件中添加这个函数:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

比Meagar的回答更简单

覆盖touchesBegan: withEvent:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [textField resignFirstResponder];`
}

当你在背景中触摸任何地方时,这将使键盘消失。

Try:

[self.view endEditing:YES];

最简单的方法是调用方法

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
    if(![txtfld resignFirstResponder])
    {
        [txtfld resignFirstResponder];
    }
    else
    {

    }
    [super touchesBegan:touches withEvent:event];
}

您可以递归地遍历子视图,存储所有UITextFields的数组,然后循环遍历它们并重新分配它们。

这并不是一个很好的解决方案,特别是当你有很多子视图时,但对于简单的应用程序来说,它应该是可行的。

我用一种更复杂,但更高效的方式解决了这个问题,但使用了我的应用程序的动画引擎的单例/管理器,任何时候一个文本字段成为响应器,我会将它分配给一个静态,它会根据某些其他事件被清除(辞职)…我几乎不可能用一段话解释清楚。

要有创意,在我发现这个问题后,我只花了10分钟就考虑了这个问题。