当文本字段在滚动视图中时,如何使键盘具有类似于默认应用程序的行为?

时间:2013-02-20 03:47:59

标签: ios ios5 ios6

我在storyboard中创建了简单的应用程序(只有一个控制器),我把scrollview和scrollview里面的一对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)。当我点击任何一个文本字段键盘弹出时,但当我完成输入后,我无法隐藏键盘。 (在以前的版本中,当我单击文本字段时,我没有滚动视图和键盘隐藏)。如何使键盘具有默认应用程序中的行为,如何隐藏?

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:2)

在视图控制器中:

[self.view endEditing:YES];

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

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

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

endEditing是解除键盘的最佳方式,因为即使添加其他字段后它也能正常工作。