跳到下一个UItextField

时间:2013-12-12 08:53:38

标签: ios uitableview uitextfield

我在UItableView中有一些UITextfields。文本字段已经在我创建的UITableViewCell中进行了子类化。在键盘上按下返回键后,我会想知道如何进入相应行的下一个单元格。

因此,如果用户要从宽度开始,他们将继续沿着宽度列,或者如果他们想要在每次输入时输入高度,他们将继续沿着该列继续。

目前发生的事情是,如果我使用宽度colum,它工作正常,但如果我在点击输入后选择高度UItextField,它会跳转到下一个宽度单元格。

这是我检测返回键的代码。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
    return YES;
}

这就是我对单元格的表格视图。

enter image description here

任何帮助将不胜感激。

有关详细信息,请参阅我将自定义单元格字段添加到UItextfield的方法。

NSString *widthString = [currentFinishingDictionary objectForKey:@"w"];
    if ((NSNull *) widthString != [NSNull null]) {
        cell.widthTexField.text = widthString;
        cell.widthTexField.delegate = self;
        cell.widthTexField.tag = indexPath.row;
    } else {
        cell.widthTexField.text = @" ";
        cell.widthTexField.delegate = self;
        cell.widthTexField.tag = indexPath.row;
    }

    NSString *heightString = [currentFinishingDictionary objectForKey:@"h"];
    if ((NSNull *) heightString != [NSNull null]) {
        cell.heightTextField.text = heightString;
        cell.heightTextField.delegate = self;
        cell.heightTextField.tag = indexPath.row;
    } else {
        cell.heightTextField.text = @" ";
        cell.heightTextField.delegate = self;
        cell.heightTextField.tag = indexPath.row;
    }

6 个答案:

答案 0 :(得分:0)

确保已将标记设置为UITextField

你应该这样试试:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //[[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
    // Get here you cell seleted Refrecne
      id obj = [cell.contentView viewWithTag:textField.tag+1];

      if([obj isKindOfClass:[UITextField class]]) {
        UITextField *nextField = (UITextField*)obj
         [nextField becomeFirstResponder];
     } 
    return YES;
}

或者您可以使用ELCTextFieldCell

它在一个单元格中包含UITextField和UILabel。您可以根据需要进行自定义。

答案 1 :(得分:0)

你可以使用

   - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {


UITableViewCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]];
UITextField *tf = (UITextField*)[cell viewByTag:textField.tag+1]
[tf becomeFirstResponder];
        return YES;
    }

答案 2 :(得分:0)

我认为问题可能在于将标记分配给UITextFields。

请检查标签值是否实际上是您所假设的。

答案 3 :(得分:0)

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
      [yourtextfield resignFirstResponder];
      // save state, etc if necessary
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyCell * cell = (MyCell *)[tableView cellForRowAtIndexPath:indexPath];
    self.selectedField = cell.tf; // cell.tf is a UITextField property defined on MyCell
    [yourtextfield becomeFirstResponder];
}

答案 4 :(得分:0)

您是否尝试使用collectionView而不是tableview,集合视图设计可以与您添加的图像类似,您可以在一个单元格中添加一个文本字段,然后通过执行此操作为宽度文本字段创建第一响应者

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ( [tableView.dataSource tableView:tableView numberOfRowsInSection:0] > tag + 2)
        CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+2 inSection:0]];

        [cell.textField becomeFirstResponder];

}

如果您仍然坚持使用此设计,那么您可以这样做

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{

     int xPosition = (int)textField.frame.origin.x;

     CustomCell *cell = [self.myTableview cellForRowAtIndexPath:[NSIndexPath indexPathForRow: textField.tag+1 inSection:0]];

     if((int)cell.textField1.x == xPosition)
     {
          [cell.textField1.x becomeFirstResponder];

     }
    else
     {
          [cell.textField2.x becomeFirstResponder];
     }

}

代码未编译。只写了逻辑。希望它有帮助:)

答案 5 :(得分:0)

更改以下可能对您有用的分配标记值。

NSString *widthString = [currentFinishingDictionary objectForKey:@"w"];
    if ((NSNull *) widthString != [NSNull null]) {
        cell.widthTexField.text = widthString;
        cell.widthTexField.delegate = self;
        cell.widthTexField.tag = indexPath.row;
    } else {
        cell.widthTexField.text = @" ";
        cell.widthTexField.delegate = self;
        cell.widthTexField.tag = indexPath.row;
    }

    NSString *heightString = [currentFinishingDictionary objectForKey:@"h"];
    if ((NSNull *) heightString != [NSNull null]) {
        cell.heightTextField.text = heightString;
        cell.heightTextField.delegate = self;
        cell.heightTextField.tag = indexPath.row + 2000;
    } else {
        cell.heightTextField.text = @" ";
        cell.heightTextField.delegate = self;
        cell.heightTextField.tag = indexPath.row + 2000;
    }

现在您的textfields标记如下所示,可以按照您的需要工作。

0 2000
1 2001
2 2002
3 2003
4 2004
.. ........

现在你的方法正常工作,但也需要考虑其他想法,因为当你有2000个单元格时这会出错。

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    // i.e. textField.tag == 6 then next 6 + 1 == 7
    // i.e. textField.tag == 20006 then next 2006 + 1 == 2007
    [[self.view viewWithTag:textField.tag+1] becomeFirstResponder];
    return YES;
}