按返回时如何以编程方式关闭键盘iOS

noo*_*obs 102 keyboard uitextfield ios

我创建了一个以UITextField编程方式创建UITextFieldviewController的属性.我需要通过屏幕上的返回和触摸来关闭键盘.我能够让屏幕触摸解除,但按下返回不起作用.

我已经看过如何使用故事板以及UITextField直接分配和初始化对象而不将其创建为属性.可以吗?

.H

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate>

@property (strong, atomic) UITextField *username;

@end
Run Code Online (Sandbox Code Playgroud)

.M

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor blueColor];
    self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
    self.username.placeholder = @"Enter your username";
    self.username.backgroundColor = [UIColor whiteColor];
    self.username.borderStyle = UITextBorderStyleRoundedRect;
    if (self.username.placeholder != nil) {
        self.username.clearsOnBeginEditing = NO;
    }
    _username.delegate = self; 

    [self.view addSubview:self.username];
    [_username resignFirstResponder];

}

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

@end
Run Code Online (Sandbox Code Playgroud)

Nit*_*hel 257

简单的方法是将委托连接UITextField到self(self.mytestField.delegate = self)并在方法中textFieldShouldReturn使用解除键盘[textField resignFirstResponder];

另一种解除键盘的方法如下:

[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

放在[self.view endEditing:YES];您要关闭键盘的位置(按钮事件,触摸事件等).


iPa*_*tel 29

添加如下的委托方法UITextField:

@interface MyController : UIViewController <UITextFieldDelegate>
Run Code Online (Sandbox Code Playgroud)

然后设置你的textField.delegate = self;那个也添加两个委托方法UITextField

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{   
    return YES;
}

// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)


小智 25

//通过触摸视图中的背景隐藏keyBoard

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


Cha*_*lva 21

只需在swift中使用它来解除键盘:

UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
Run Code Online (Sandbox Code Playgroud)

斯威夫特3

UIApplication.shared.sendAction(#selector(UIResponder.resign??FirstResponder), to: nil, from: nil, for: nil)
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 15

SWIFT 4:

self.view.endEditing(true)
Run Code Online (Sandbox Code Playgroud)

要么

将文本字段的委托设置为当前viewcontroller,然后:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()

    return true

}
Run Code Online (Sandbox Code Playgroud)

Objective-C的:

[self.view endEditing:YES];
Run Code Online (Sandbox Code Playgroud)

要么

将文本字段的委托设置为当前viewcontroller,然后:

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

    return YES;
}
Run Code Online (Sandbox Code Playgroud)


小智 9

在App Delegate中,您可以编写

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)

使用这种方式,你不能写太多的代码.


Zen*_*Zen 7

尝试了解第一响应者在iOS视图层次结构中的含义.当您触摸文本字段(或第一响应者)时(或以becomeFirstResponder编程方式将消息传递给它),它会显示键盘.因此,要将文本字段从第一个响应者中移除,您应该将消息传递resignFirstResponder给它.

[textField resignFirstResponder];
Run Code Online (Sandbox Code Playgroud)

要在返回按钮上隐藏键盘,您应该实现其委托方法textFieldShouldReturn:并传递resignFirstResponder消息.

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)


Tak*_*ide 7

这是我在代码中使用的内容.它就像一个魅力!

在yourviewcontroller.h中添加:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

现在在.m文件中,将其添加到ViewDidLoad函数中:

- (void)viewDidLoad {
    [super viewDidLoad];

    //Keyboard stuff
    tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    tapRecognizer.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapRecognizer];
}
Run Code Online (Sandbox Code Playgroud)

另外,在.m文件中添加此函数:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*aga 5

对于UITextViewa 内的一组 s ViewController

斯威夫特3.0

for view in view.subviews {
    if view is UITextField {
        view.resignFirstResponder()
    }
}
Run Code Online (Sandbox Code Playgroud)

Objective-C

// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
    if ([view isKindOfClass:[UITextField class]]) {
        // no need to cast
        [view resignFirstResponder];
    }
}
Run Code Online (Sandbox Code Playgroud)