我想知道如何使键盘消失时,用户触摸以外的UITextField。


当前回答

斯威夫特4 oneliner

view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))

其他回答

如果视图被嵌入到UIScrollView中,那么你可以使用以下方法:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

前者会在表格视图滚动时将键盘动画化,后者会像股票消息应用程序一样隐藏键盘。

注意,这些都可以在iOS 7.0或更高版本上使用。

如果我得到你的权利,你想辞职键盘狡猾敲在文本字段之外,但你没有你的文本字段的引用。

试试这个;

Take global textField, lets call it reftextField Now in textFieldDidBeginEditing set referenced text field to - (void) textFieldDidBeginEditing:(UITextField *)textField{ reftextField = textField; } Now you can happily use on any button clock, (adding a transparent button on begin editing recomended) - (void)dismissKeyboard { [reftextField resignFirstResponder]; } Or for resigning done button try this. //for resigning on done button - (BOOL) textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES; }

我发现有些人在使用UITapGestureRecognizer方法时遇到了问题。我在保持现有按钮点击行为不变的情况下完成这一功能的最简单方法是只添加一行到@Jensen2k的答案:

[tap setCancelsTouchesInView:NO];

这使得我现有的按钮仍然可以工作,而不需要使用@Dmitry Sitnikov的方法。

在这里阅读有关属性(搜索CancelsTouchesInView): UIGestureRecognizer类引用

我不确定它将如何与滚动条一起工作,因为我看到有些人有问题,但希望其他人可能会遇到与我相同的情况。

只是在这里添加我的版本如何在外部触摸时取消键盘。

viewDidLoad:

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

在任何地方:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [textFieldName resignFirstResponder];
    puts("Dismissed the keyboard");
}

藏品视图:

// the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
collectionView.keyboardDismissMode = .interactive
// dismisses the keyboard when a drag begins
collectionView.keyboardDismissMode = .onDrag