当用户点击 textField 外部时关闭键盘

Dismiss keyboard when user taps outside the textField

我试图在用户选择 textFiled 以外的内容时关闭键盘。我尝试了以下方法:

- (void)viewDidLoad {
    mytextField1.delegate = self;
    mytextFiled2.delegate = self;
}

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

这没有用。然后我在 touchesBagan 中尝试了 [... resignFirstResponder],但也没有用。难道我做错了什么?为什么这不起作用?

您是否尝试过在关闭键盘的文本字段的超级视图上添加 UITapGestureRecognizer?

向视图(而不是文本字段)添加点击手势,以便您知道何时有人点击视图。

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped)];
[self.view addGestureRecognizer:tap];

然后当该方法被调用时,退出第一响应者以关闭键盘。

- (void)viewTapped
{
    if (self.textField.isFirstResponder) {
        [self.textField resignFirstResponder];
    }
}

您可以使用 UITapGestureRecognizer。并将当前聚焦的 TextField 保存在 activeTF。您需要将当前视图控制器设置为 UITextField(s) 的委托。

UITextField *activeTF;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    .......

    UITapGestureRecognizer *dismissTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:dismissTap];
}


- (void)dismissKeyboard {
    if (activeTF) {
        [activeTF resignFirstResponder];
    }
}

#pragma mark - TextField Delegate

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    activeTF = sender;
}

- (void)textFieldDidEndEditing:(UITextField *)sender
{
    activeTF = nil;
}