当用户按下其他控件/空格时,如何取消对UITextField的聚焦?

nic*_*cks 5 objective-c xamarin.ios ios xamarin swift

我有一个UITextField.它工作正常,意味着当按下时,它会触发EditingDidBegin方法等.问题是我无法取消选择它,这意味着键盘将始终可见,覆盖重要控件.我认为默认行为是当用户点击某个不同的地方时取消/隐藏键盘UITextField,例如在它周围的空白区域,但它不是 - UITextField它仍然存在.实现此行为的一个选择是将触摸侦听器添加到UITextFields除此之外的所有内容并在触发时执行手动非聚焦,但出于显而易见的原因,这将是一个可怕的解决方案.

问题是,UITextFields当用户按下其他控件/"空白区域"时,如何解除对焦?

提议的选项不适用于我需要的Xamarin.iOS.

Har*_*nda 9

迅速

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
   self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)

目标C.

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

它将通过点击外部来重新签名textField或textView.

注意:它不会影响scrollView

在滚动视图中

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
tapGesture.cancelsTouchesInView = NO;    
[yourScrollView/TableView addGestureRecognizer:tapGesture];

-(void)hideKeyboard {
    [textFieldInYourScrollView/TableView resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)


Rus*_*ell 7

我总是将此添加到我的ViewController

override func viewDidLoad()
{
    super.viewDidLoad()

    // other stuff

    // but to stop editing when the user taps anywhere on the view, add this gesture recogniser
    let tapGestureBackground = UITapGestureRecognizer(target: self, action: #selector(self.backgroundTapped(_:)))
    self.view.addGestureRecognizer(tapGestureBackground)
}

func backgroundTapped(_ sender: UITapGestureRecognizer)
{
    self.endEditing(true)   
}
Run Code Online (Sandbox Code Playgroud)