隐藏iOS键盘

42

我有几个文本输入框,当我点击背景时可以隐藏键盘,但只有当我一直在输入第一个文本框名称 textField1 时才能实现。现在这段代码应该很简单,但我似乎无法做到。

-(IBAction)backgroundTouched:(id)sender {
    [textField1 resignFirstResponder];
    [buildLength resignFirstResponder];
    [buildWidth resignFirstResponder];
    [ridgeWidth resignFirstResponder];
    [rafterWidth resignFirstResponder];
    [hipWidth resignFirstResponder];
    [eaveOverhang resignFirstResponder];
    [spacing resignFirstResponder];
}

哪个对象接收了 backgroundTouched: 操作?是视图吗?还是你放在所有东西后面的某个对象?我在iOS上让键盘隐藏的方法是重写ViewController的 touchesEnded:withEvent:。当没有其他对象能够处理触摸事件时,它会被调用。在那里我取消第一响应者,但你需要检查 isFirstResponder 因为如果你不消耗这个触摸事件,你应该调用super。 - Russ
同意@Russ...在视图控制器上使用触摸事件是更简单的方法。但是,如果它适用于textField1,它仍然是神秘的。为什么不是其他的呢?我猜测其他句柄不好(例如,“buildLength”没有正确初始化)。 - danh
4个回答

190

如果您想在点击按钮时隐藏键盘,而您的 view 中有多个 UITextFields ,那么您应该使用:

[self.view endEditing:YES];

点击视图的任何位置,键盘将消失。


我注意到,在某些情况下,这种方法需要一些延迟,最多约0.3秒。我的意思是,resignFirstResponder会立即移除键盘。但是这种方法不会,有时在使用此方法后需要延迟使用performSelector。 - Denis Kutlubaev

28

试试这个:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{
     [[self view] endEditing:YES];
}

7

您也可以遍历视图数组(例如UIView的子视图),手动取消键盘,这对于您不想在父UIView的所有子视图上取消键盘非常有用。

- (void)viewDidLoad
{
    self.view.userInteractionEnabled = TRUE;
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    //Iterate through your subviews, or some other custom array of views
    for (UIView *view in self.view.subviews)
        [view resignFirstResponder];
}

2

您可以尝试使用UITouch方法,并在其中设置文本字段对象,然后调用resignFirstResponder函数。每当您触摸屏幕时,键盘就会关闭。希望这对您有所帮助。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接