如何在Enter键上关闭键盘

时间:2012-02-21 10:34:01

标签: iphone objective-c ios keyboard enter

我想在按RETURN键时关闭键盘。

我试过把按钮放在视野的背面。

但是如何通过按RETURN键来执行此操作?

4 个答案:

答案 0 :(得分:7)

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

不要忘记添加委托UITextFieldDelegate

答案 1 :(得分:2)

我希望您已完成UIViewController <UITextFieldDelegate>yourTextField.delegate=self;

然后在委托方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField;
{

   [textField resignFirstResponder];
   return YES;

}

答案 2 :(得分:2)

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

@interface MyController: UIViewController <UITextFieldDelegate> {
   UITextField *activeTextField;

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

然后你应该实现两个委托方法,如下所示,

- (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子类化为接受触摸,然后在用户点击视图本身时指示文本视图重新签名。

创建一个新类

#import <UIKit/UIKit.h>

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

@end

然后,在实现中,实现touchesEnded:withEvent:方法并要求UITextView作为第一响应者辞职。

#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 :(得分:1)

确保您的视图控制器类是UITextField的委托,然后使用该类中的委托方法:

#pragma mark - Delegate Methods
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    // Dismiss the keyboard when the Return key is pressed.
    [textField resignFirstResponder];

    return YES;
}