当用户点击其他地方时,如何从文本字段中退出第一响应者?

Ste*_*eve 24 iphone uiscrollview uitextfield ios4 ios

我用ScrollView填充了我的视图(与视图大小相同),当用户点击View(或scrollview)中的其他位置时,我仍然坚持如何辞退第一响应者.有关如何做到这一点的任何想法?我正在使用以下方法,但它没有按预期工作:

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

感谢帮助,

斯特凡

Dan*_*eel 82

我在这里找到了答案:链接

如果你的最终目的只是让第一响应者辞职,这应该有效:[self.view endEditing:YES]

这种方法适合它!参考:endEditing:

导致视图(或其中一个嵌入的文本字段)重新签署第一个响应者状态.

  • 这比调用每个输入的`resignFirstResponder`方法要好得多. (3认同)

And*_*lla 18

要获得更强大,更干净的解决方案,请在主视图中添加轻触手势识别器.

这对于嵌套视图更有效,并且比代码和UI构建器中的秘密按钮更清晰.

在您的视图中加载:

UITapGestureRecognizer* tapBackground = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];
[tapBackground setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tapBackground];
Run Code Online (Sandbox Code Playgroud)

..并定义要在点击时触发的目标操作:

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


pab*_*ros 10

对于Swift 3Swift 4,你可以这样做:

func viewDidLoad() {
    super.viewDidLoad()

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.hideKeyboardByTappingOutside))

    self.view.addGestureRecognizer(tap)
}

@objc func hideKeyboardByTappingOutside() {
    self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)


Ond*_*CAN 9

最好的选择是最短的方式;)

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