我在UITableView上有一个UITextField,我使用数字键盘,但是当用户点击除UiTextField之外的任何东西时,我希望它被解雇。
我已经看过几种解决方案,但似乎没有一个确定的答案。例如,一些关于手势的讨论,当我实现它们时,它们似乎无法使用下面的代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:TRUE];
}
正如你所看到的那样,我正在尝试,但似乎并没有一种方法可行。有人可以指导我吗?
由于
答案 0 :(得分:3)
您应该使用resignFirstResponder:
[textField resignFirstResponder];
答案 1 :(得分:3)
通常情况下,您需要对不应关闭键盘的区域进行触摸测试;但一般来说,要求是告诉当前的焦点控制将其状态“重新签名”为“firstResponder”。它可能看起来像这样:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.userInput resignFirstResponder];
}
但是,您可能还需要考虑一个特殊的手势识别器,这样您就不必长期过度分析NSSet的触摸(委托给GestureRecognizer确定实际差异的任务) “解雇请求!”点击并“我可以滚动吗?”轻扫。
答案 2 :(得分:2)
使用以下代码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
// Note the '!':
if(![[touch view] class] isKindOfClass [UITableViewController class]]){
// It's not a bubble they touched, dismiss the keyboard:
[self.view endEditing:YES];
}
[super touchesBegan:touches withEvent:event];
}
或者
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [[event allTouches] anyObject];
// Note the '!':
if(![[touch view] class] isKindOfClass [UITableViewController class]]){
// It's not a bubble they touched, dismiss the keyboard:
[textField resignFirstResponder];
}
[super touchesBegan:touches withEvent:event];
}
这有助于做你想做的事情