首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在按Enter键时关闭键盘

如何在按Enter键时关闭键盘
EN

Stack Overflow用户
提问于 2012-02-21 10:34:01
回答 4查看 5.7K关注 0票数 2

当我按回车键时,我想关闭我的键盘。

我试着把按钮放在视图的背面。

但是我如何通过按回车键来完成这项工作呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-21 10:37:47

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}

别忘了添加委托UITextFieldDelegate

票数 7
EN

Stack Overflow用户

发布于 2012-02-21 10:46:54

我假设你说的是UITextField而不是UITextView,因为你的问题不是很清楚吗?如果是,请确保在接口文件中将您的类标记为UITextFieldDelegate

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@interface MyController: UIViewController <UITextFieldDelegate> {
   UITextField *activeTextField;

   // ...remainder of code not show ...
}

然后实现两个委托方法,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    activeTextField = textField;!    
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    activeTextField = nil; 
    [textField resignFirstResponder];
    return YES;
}

但是,如果您使用的是UITextView,那么事情就会稍微复杂一些。UITextViewDelegate协议缺少与textFieldShouldReturn:方法相同的功能,大概是因为我们不应该期望Return键是用户希望停止编辑多行文本输入对话框中的文本的信号(毕竟,用户可能希望通过按Return键来插入换行符)。

然而,有几种方法可以绕过UITextView无法使用键盘辞去第一响应者的职位。通常的方法是,当UITextView显示弹出键盘时,在导航栏中放置一个完成按钮。当点击时,此按钮要求文本视图辞去第一响应者的职务,然后退出键盘。

但是,根据您规划界面的方式,您可能希望在用户在UITextView之外点击时UITextView退出。要做到这一点,您需要子类UIView来接受触摸,然后指示文本视图在用户在视图外部点击时辞职。

创建一个新类,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import <UIKit/UIKit.h>

@interface CustomView : UIView {
   IBOutlet UITextView *textView;
}

@end

然后,在实现中,实现touchesEnded:withEvent:方法并要求UITextView辞去first responder的职务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "CustomView.h"

@implementation CustomView

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (void) awakeFromNib {
    self.multipleTouchEnabled = YES;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"touches began count %d, %@", [touches count], touches);

    [textView resignFirstResponder];
    [self.nextResponder touchesEnded:touches withEvent:event];
}

@end

一旦添加了类,您需要保存所有更改,然后进入Interface Builder并单击您的视图。打开Utility pabel中的Identity检查器,并将nib文件中的视图类型更改为您的CustomView而不是默认的UIView类。然后在Connections Inspector中,将textView插座拖到UITextView上。这样做之后,一旦您重新构建了您的应用程序,在活动UI元素之外的触摸现在将取消键盘。但是请注意,如果您子类化的UIView位于其他UI元素的“后面”,这些元素将在到达UIView层之前拦截这些接触。因此,虽然这个解决方案很优雅,但它只能在某些情况下使用。在许多情况下,您将不得不求助于暴力方法,即在导航栏中添加一个完成按钮来关闭键盘。

票数 3
EN

Stack Overflow用户

发布于 2012-02-21 10:38:04

我希望你已经做过UIViewController <UITextFieldDelegate>yourTextField.delegate=self

然后在委托方法中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (BOOL)textFieldShouldReturn:(UITextField *)textField;
{

   [textField resignFirstResponder];
   return YES;

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9375969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文