Ios 关闭键盘

Ios 关闭键盘,ios,objective-c,dismiss,Ios,Objective C,Dismiss,因此,我有一个自行创建的顶栏控制器,它正在我的其他控制器视图中实现。我在这个顶部栏上有一个文本字段。我想知道,如果用户在键盘外单击任何按钮,那么让键盘关闭的最佳方法是什么。我有一个触碰手势识别器,可以执行键盘上的方法。但是,这仅在用户单击键盘外的顶部栏时有效。有没有办法设置它,这样如果用户单击屏幕上的任意一个按钮,就会关闭键盘?您可以尝试为文本字段提供一个透明的inputAccessoryView,大小可以填充屏幕的其余部分,它可以捕捉点击并关闭键盘。我所描述的方法是一种破解方法,但仍然有效 使

因此,我有一个自行创建的顶栏控制器,它正在我的其他控制器视图中实现。我在这个顶部栏上有一个文本字段。我想知道,如果用户在键盘外单击任何按钮,那么让键盘关闭的最佳方法是什么。我有一个触碰手势识别器,可以执行键盘上的方法。但是,这仅在用户单击键盘外的顶部栏时有效。有没有办法设置它,这样如果用户单击屏幕上的任意一个按钮,就会关闭键盘?

您可以尝试为文本字段提供一个透明的inputAccessoryView,大小可以填充屏幕的其余部分,它可以捕捉点击并关闭键盘。

我所描述的方法是一种破解方法,但仍然有效

  • 使用
    视图的框架创建一个透明的
    ui按钮
    ,如下所示:

    UIButton* overlay = [UIButton buttonWithType:UIButtonTypeCustom];
    overlay.frame = self.view.bounds;
    overlay.backgroundColor = [UIColor clearColor];
    [overlay addTarget:self action:@selector(hideOverlay:) forControlEvents:UIControlEventTouchDown];
    [self.view.subviews[0] insertSubview:overlay belowSubview:self.textField];
    
  • 创建一个方法
    hideOverlay
    以关闭键盘并隐藏透明屏幕:

    -(void)hideOverlay:(id)sender {
        UIView* overlay = sender;
        [overlay removeFromSuperview];
        [self.textField resignFirstResponder];
    }
    
  • 理想情况下,您应该调用
    textfielddbeginediting:
    UITextFieldDelegate的协议方法中的第一个代码块,并相应地注册调用类


    希望有帮助。

    在self.view上添加点击手势…嘿,谢谢你的帮助。但我面临的问题是,我现在需要让我的顶部栏控制器的框架覆盖整个屏幕。但当我这样做时,它使得父控制器按钮无法工作,因为它们现在位于顶部栏视图的后面(尽管它们仍然可见)。有办法解决这个问题吗?