最优雅的方法是在UiTableView上关闭UITextField的数字键盘

时间:2012-09-01 20:47:05

标签: ios uitableview

我在UITableView上有一个UITextField,我使用数字键盘,但是当用户点击除UiTextField之外的任何东西时,我希望它被解雇。

我已经看过几种解决方案,但似乎没有一个确定的答案。例如,一些关于手势的讨论,当我实现它们时,它们似乎无法使用下面的代码:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    [[self view] endEditing:TRUE];

}

正如你所看到的那样,我正在尝试,但似乎并没有一种方法可行。有人可以指导我吗?

由于

3 个答案:

答案 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];
}

这有助于做你想做的事情