iPhone:在uitableview中跳转到下一个uitextfield,如何?

iPhone:在uitableview中跳转到下一个uitextfield,如何?,iphone,uitableview,uitextfield,Iphone,Uitableview,Uitextfield,在我的iPhone项目中,我正在使用UITableview和包含UITextfields的UITableViewCells。我在许多应用程序中看到,可以使用“下一步”按钮跳转到下一个单元格中的下一个文本字段。实现这一目标的最佳方式是什么 我的想法是通过正在编辑的textfield获取单元格的indexPath,然后通过cellforrowatinexpath获取下一个单元格。但是如何获取当前正在编辑的单元格的索引 谢谢 在表视图中保留对UITextField实例的引用 为UITextField实

在我的iPhone项目中,我正在使用UITableview和包含UITextfields的UITableViewCells。我在许多应用程序中看到,可以使用“下一步”按钮跳转到下一个单元格中的下一个文本字段。实现这一目标的最佳方式是什么

我的想法是通过正在编辑的textfield获取单元格的indexPath,然后通过cellforrowatinexpath获取下一个单元格。但是如何获取当前正在编辑的单元格的索引

谢谢

  • 在表视图中保留对
    UITextField
    实例的引用
  • UITextField
    实例指定唯一的标记值
  • 在上一个文本字段中,您可以设置其返回键类型,从而将键盘的返回键标签从“下一步”更改为“完成”:
    [finalTextField setReturnKeyType:UIReturnKeyDone]
  • UITextField
    委托方法
    -textfield应返回:
    ,遍历响应者:

    - (BOOL) textFieldShouldReturn:(UITextField *)tf {
        switch (tf.tag) {
            case firstTextFieldTag:
                [secondTextField becomeFirstResponder];
                break;
            case secondTextFieldTag:
                [thirdTextField becomeFirstResponder];
                break;
            // etc.
            default:
                [tf resignFirstResponder];
                break;
        }
        return YES;
    }
    

    假设UITextField已添加到UITableViewCell,如下所示

    UITableViewCell *cell;
    UITextField *textField;
    ...
    textField.tag = kTAG_TEXTFIELD;
    [cell.contentView addSubview:textField];
    ...
    
    您可以通过以下方式获取当前索引路径:

    -(BOOL)textFieldShouldReturn:(UITextField *)textField {
      if([textField.superView.superView isKindOfClass:[UITableViewCell class]]) {
        UITableViewCell *cell = (UITableViewCell *)textField.superView.superView;
        NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell];
      }
      ...
    
    下一行的UITextField将是

    NSIndexPath *indexPathNextRow = [NSIndexPath indexPathForRow:(indexPath.row+1) inSection:indexPath.section];
    UITableViewCell *cellNextRow = (UITableViewCell *)[self.myTableView cellForRowAtIndexPath:indexPathNextRow];
    UITextField *textFieldNextRow = (UITextField *)[cellNextRow.contentView viewWithTag:kTAG_TEXTFIELD];
    

    希望有帮助

    谢谢!但我只是跟踪当前的文本字段,因为有很多文本字段。我可以在不使用标记的情况下以某种方式获取下一个文本字段吗?当然,只要保留对它们的引用,
    UITextField*firstTextField
    ,或者使用数组等。但是标记可能是识别代理文本字段的最快方法。但是如果我不想跟踪所有文本字段或标记?我是否可以以某种方式获取当前编辑的文本字段所在的当前单元格,然后获取indexpath?如果在单元格上启用了选择功能,则可以使用
    -tableView:didselectRowatingIndexPath:indexpath
    方法进行操作,但这与文本字段无关,我想知道是否没有其他方法-在XCode下运行模拟器时,您可以使用硬件键盘上的“tab”从一个字段跳到另一个字段。。。但我不知道这是否对我们有用。在iOS7中,您需要将textField.superView.superView替换为textField.superView.superView.superView