我使用 UITableView 作为用户/密码登录控件。现在它是视图上的唯一控件,还有一个登录按钮。当我点击里面时,文本编辑内容变为活动状态,键盘弹出,我可以输入。但是没有办法停止编辑。我想在我的 UIView 的白色区域上单击外部,以便将焦点从我的 UITableVIew 内的文本编辑器中移开,并且键盘再次变得不可见。
我怎么做?
您可以添加 alpha 通道为零的按钮。在您的登录名和密码字段后面。通过以下方式设置此按钮的操作:
-(void)hideKeyboard:(id)sender
{
[self.username resignFirstResponder];
[self.password resignFirstResponder];
}
在viewDidLoad
让您的视图控制器监听键盘通知并创建一个点击识别器,它将接收您的 tableView 之外的所有事件:
- (void)viewDidLoad
{
[super viewDidLoad];
...
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name:
UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name:
UIKeyboardWillHideNotification object:nil];
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard:)];
...
}
然后在键盘的通知方法中从您的视图中添加和删除手势识别器。
//add gesture recognizer when keyboard appears
-(void)keyboardWillShow:(NSNotification *) note {
[self.view addGestureRecognizer:tapRecognizer];
}
//remove it when keyboard disappears
-(void)keyboardWillHide:(NSNotification *) note
{
[self.view removeGestureRecognizer:tapRecognizer];
}
在手势识别器的操作方法中,您让所有第一响应者退出键盘:
-(IBAction)dismissKeyboard:(id)sender
{
//this removes ALL firstResponder from view
[self.view endEditing:TRUE];
}
不要忘记在某个时候结束收听键盘通知:
[[NSNotificationCenter defaultCenter] removeObserver:self];
在被调用函数中添加 Single Tap GestureRecognizer 并退出键盘
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignKeyBoard)];
[tap setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:tap];