使用各种控件(按钮,开关和文本字段)在tableview中实现上一个/下一个按钮

时间:2014-02-03 04:50:16

标签: ios uitableview uitextfield

我有一个场景,我必须在tableview中实现上一个/下一个按钮。该表是自定义单元格。其中一些是下拉,一些开关和一些文本字段。它由多个部分和行组成。

我需要在点击下一个按钮时从一个文本字段跳到下一个文本字段。

我可以将我的问题陈述分成: 1.在文本字段上按下一个按钮时,在表中查找下一个连续的文本字段。 2.滚动到下一个字段。 3.使其成为第一响应者。

我在网上尝试了很多技术,没有运气。此外,任何其他建议将有助于如何继续实施此类功能

            NSMutableArray *cells = [[NSMutableArray alloc] initWithArray:[tableView visibleCells]];
            int count1 = 0;
           //tableViewCell_Ncolumn is a custome cell
            for (tableViewCell_Ncolumn *cell in cells)
            {
                count1 ++;
                 for (UIView *view in  cell.contentView.subviews)
                 {
                     if ([view isKindOfClass:[UITextField class]])
                     {

                           UITextField* currField = (UITextField *)view;
                            for (int i=count1; i<[cells count]; i++)
                            {
                                UITextField *nextField;
                                 //Geting current textfield and checking if it is being edited
                                 if ([currField isEditing])
                                      {
                                          tableViewCell_Ncolumn *nextCell = [cells objectAtIndex:i+1];
                                          for (UIView *view in  cell.contentView.subviews)
                                          {
                                              if ([view isKindOfClass:[UITextField class]])
                                              {
                                                  nextField = (UITextField *)view;
                                              }
                                              else
                                              {
                                                  //loop till you find next textfield in the table

                                              }
                                          }


                                          [nextField becomeFirstResponder];

                                          [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i+1 inSection:1] atScrollPosition:UITableViewScrollPositionMiddle animated:YES];

                                          break;


                                      }

                            }

                     }
                 }
            }
        };

3 个答案:

答案 0 :(得分:1)

对于文本字段,您可以使用以下方法,并且可以通过此appraoch开发其他控件的变通方法。


textFieldShouldBeginEditing - 设置滚动位置
actionNext - 将第一响应者设置为下一个文本字段重新设置当前
actionPrevious - 将第一响应者设置为prev textfield resign current
actionDone - 辞职第一响应者

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

    if (textField.tag == 25)
    {

        [tableView setContentOffset:CGPointMake(0,theCell.center.y-65) animated:YES];

      // or you can use this method as well      
      // [[self tableView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

   return YES;

    }
 }

- (IBAction)actionPrevious:(id)sender {

    if ([self.textFieldEmployer1 isFirstResponder])
    {
       [self.textFieldConfirmPassword becomeFirstResponder];
    }
    else if ([self.textFieldConfirmPassword isFirstResponder])
    {
       [self.textFieldPassword becomeFirstResponder];
    }

 }

  - (IBAction)actionNext:(id)sender {

    if ([self.textFieldEmail isFirstResponder])
    {
        [self.textFieldPassword becomeFirstResponder];
    }
   else if ([self.textFieldUserName isFirstResponder])
   {
       [self.textFieldPassword becomeFirstResponder];
   }

}

- (IBAction)actionDone:(id)sender
{

[self.view endEditing:YES];

}

答案 1 :(得分:0)

最好的方法是使用提供标记属性。

 UITextField* currField=[cell.contentView viewWithTag:5];
 UITextField* nextField =[cell.contentView viewWithTag:6];

     [currField resignFirstResponder];
     [nextField becomeFirstResponder];

答案 2 :(得分:0)

我遇到了类似的问题,最后创建了UIToolbar的子类来管理下一个/上一个功能:https://github.com/jday001/DataEntryToolbar

您将工具栏设置为文本字段的inputAccessoryView,并将其添加到字典中。这使您可以向前和向后循环,即使是动态内容也是如此。有一个示例应用程序来帮助实现详细信息。您将需要自己的数据模型来跟踪字段内的值。

DataEntryToolbar是用swift编写的,但你可以将它与你的objective-c代码混合使用,没问题。如果您遇到任何问题,请在Importing Swift into Objective-C下查看Apple的文档:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

修改 刚刚意识到这篇文章差不多有一年了,但希望这会对其他人有所帮助。