0

我有UITableView两个部分。第一部分是带有步进器的静态行,可创建第二部分的单元格。第二部分的每个单元格都包含UITextField带键盘。我可以使用键盘或键盘中的附加完成按钮关闭键盘UITapGestureRecognizer,但它仅适用于最后一个单元格。我尝试了以下方法:

  1. UITapGestureRecognizer在表格视图中

在我的ViewDidLoad我放:

   UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideKeyboard)];
    [self.tableView addGestureRecognizer:gestureRecognizer];

进而

-(void)hideKeyboard{
    [self.tableView resignFirstResponder];
}

或者

-(void)hideKeyboard:(UITapGestureRecognizer*)sender{
    [self.cellText endEditing:YES];
}
  1. 使用标签来识别我正在编辑的文本字段。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath I added
    [cellText addTarget:self action:@selector(myNumberValueBeginEditing:) forControlEvents:UIControlEventEditingDidBegin];

并且在

-(void)myNumberValueBeginEditing:(UITextField *)sender
{
    int row = [sender.superview.superview tag];
    UITextField *cellTemp = (UITextField*)[(UITableViewCell *)sender.superview viewWithTag:200+row];
    cellTemp.delegate = self;
    [cellTemp becomeFirstResponder];
}

然后我试图在 DONE 按钮中 resignFirstResponder

-(IBAction)doneButton:(UITextField *)sender {
NSLog(@"doneButton");
    int row = [sender.superview.superview tag];
    [(UITextField*)[(UITableViewCell *)sender.superview viewWithTag:200+row] resignFirstResponder];
}

我没有更多的想法如何从所有人中退出键盘UITextFields。如果有人有一些补救措施,我将不胜感激。

4

1 回答 1

1

您对endEditing:. 不要发送endEditing:到您的文本字段的实例,而是尝试将其发送到您的主视图。前任:

[self.view endEditing:YES];

endEditing:可以直接发送到文本字段实例或视图,在后者的情况下,任何正在编辑的文本字段是您指定的视图的子视图,都将退出第一响应者。

从文档:

导致视图(或其嵌入的文本字段之一)放弃第一响应者状态

于 2013-02-26T15:42:13.067 回答