如何在UITableView中激活next和previos UITextField?

时间:2013-04-10 06:25:20

标签: iphone ipad ios6 uitableview uitextfield

我在我的应用程序中使用this one 将UITextFields添加到我的UITableViewCells,现在我不知道如何通过使用键盘工具栏中的下一个按钮让用户跳转到下一个项目,这里我的代码

 IBOutlet UITextField *contNo,*breed,*coat,*color,*birthdate;
 IBOutlet UIToolbar *toolBar;
 IBOutlet UIBarButtonItem *barButton;
 NSArray *fieldsArray;

 fieldsArray = [[NSArray alloc] initWithObjects:birthdate,contNo, breed,homeAddress, coat,color, nil];

-(IBAction)next
 { 
 for (int i=0; i<[fieldsArray count]; i++)
 { if ([[fieldsArray objectAtIndex:i] isEditing] && i!=[fieldsArray count]-1)
   {
         [[fieldsArray objectAtIndex:i+1] becomeFirstResponder];
      if (i+1==[fieldsArray count]-1)
        {
            [barButton setTitle:@"Done"];
            [barButton setStyle:UIBarButtonItemStyleDone];
        }else
        {
            [barButton setTitle:@"Done"];
            [barButton setStyle:UIBarButtonItemStyleBordered];
        }
        break;
            }
    }
 }

-(IBAction) previous
{
for (int i=0; i<[fieldsArray count]; i++)
 {
   if ([[fieldsArray objectAtIndex:i] isEditing] && i!=0)
    {
        [[fieldsArray objectAtIndex:i-1] becomeFirstResponder];
        [barButton setTitle:@"Done"];
        [barButton setStyle:UIBarButtonItemStyleBordered];
        break;
    }
  }
 } 

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{
[textField setInputAccessoryView:toolBar];
for (int i=0; i<[fieldsArray count]; i++)
{
    if ([fieldsArray objectAtIndex:i]==textField)
    {
        if (i==[fieldsArray count]-1)
        {
            [barButton setStyle:UIBarButtonItemStyleDone];
        }
    }
  }
 }

当我尝试使用tabelview外面的textfields时,下一个和上一个正常工作。下一个和之前没有使用tabelview中的内部uitextfield。任何一个请帮我理清

3 个答案:

答案 0 :(得分:0)

#pragma mark - UITextField Delegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{
    HRCFormCell * currentCell = (HRCFormCell *) textField.superview.superview;
    NSIndexPath * currentIndexPath = [self.tableview indexPathForCell:currentCell];

    if (currentIndexPath.row != [self.questionsArray count] - 1) {

        NSIndexPath * nextIndexPath = [NSIndexPath indexPathForRow:currentIndexPath.row + 1 inSection:0];
        HRCFormCell * nextCell = (HRCFormCell *) [self.tableview cellForRowAtIndexPath:nextIndexPath];

        [self.tableview scrollToRowAtIndexPath:nextIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; 

        [nextCell.textField becomeFirstResponder];
    }

    return YES;
}

请尝试使用以下代码,这对您有帮助。

答案 1 :(得分:0)

在tableview单元格的contentview中添加textfield。 将标签设置为cellforrowatindexpath中的textfield,使标签在添加时递增。 标签的格式可以是“3 + indexpath.row”

在文本开始编辑中找到当前文本字段的标记,保存标记。 接下来,增加标签,使用标签查找文本字段并使其成为第一响应者。

或尝试此链接How to activate next UITextField in a UITableView? Fabiano Francesconi提供了很好的答案 http://blog.encomiabile.it/2013/02/08/how-to-activate-next-uitextfield-in-uitableview-ios/

答案 2 :(得分:0)

这是一篇旧帖子,但页面排名很高,所以我会使用我的解决方案。

我遇到了类似的问题,最后创建了一个UIToolbar的子类来管理动态tableView中的下一个/上一个/完成的功能,其中包含以下部分:https://github.com/jday001/DataEntryToolbar

将工具栏设置为文本字段的inputAccessoryView并将其添加到字典中。这使您可以向前和向后循环,即使是动态内容也是如此。如果您想在textField导航时触发自己的功能,则有委托方法,但您不必处理管理任何标记或第一响应者状态。

有代码片段&amp; GitHub链接中的示例应用程序,用于帮助实现详细信息。您将需要自己的数据模型来跟踪字段内的值。