2

我在情节提要简单的应用程序(只有一个控制器)中创建,我将滚动视图和滚动视图内的 UITextFileds 放在一起。在控制器内部,我添加了类似的功能

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.name resignFirstResponder];
    [self.number resignFirstResponder];

    // I have tried with and without this line but doesn't work
    [self.scrollView resignFirstResponder];
}

(名称、编号为 UITextField 的 Outlets,scrollView 为 UIScrollView 的 Outlet)。当我单击任何这些文本字段时,键盘会弹出,但是当我完成输入时,我无法隐藏键盘。(在以前的版本中,当我点击文本字段时,我没有滚动视图和键盘隐藏)。如何使键盘具有默认应用程序中的行为,如何隐藏?

4

2 回答 2

3

我假设您只想能够轻按键盘并将其关闭,对吗?只需这样做:

 UITapGestureRecognizer *myTapz = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(userTapped)];
    myTapz.numberOfTapsRequired=1;
    myTapz.cancelsTouchesInView=NO;
    [self.view addGestureRecognizer:myTapz];//or do self.WhateverYourOtherViewIsCalled..tableview? scrollView?
    [myTapz release];

然后在您的选择器中:

-(IBAction)userTapped
{
  [whateverYourTextFieldIsCalled resignFirstResponder];
}
于 2013-02-20T03:57:11.907 回答
2

在您的视图控制器中:

[self.view endEditing:YES];

无论哪个字段是第一响应者,这都会关闭键盘。我认为有一些例外,但是对于您正在做的事情,它应该可以正常工作。

也是touchesBeganUIView 方法,而不是 UIViewController 方法。如果你把它放在你的 UIScrollView 中,滚动视图的 panGestureRecognizer 将阻止 touchesBegan 被调用。此外,当覆盖 touchesBegan 或其他触摸方法时,您通常也希望调用 super。

ttarules 关于创建手势识别器的建议是检测触摸的最佳方式。您可以在视图中使用 touchesBegan,只要知道其他手势识别器可以阻止它被调用(参见Session 121 - Advanced Gesture Recognition from WWDC 2010)。

endEditing是关闭键盘的最佳方式,因为即使在您添加其他字段后它仍然有效。

于 2013-02-20T03:50:46.007 回答