按下返回键时如何在下一个UITextField上移动控件

时间:2015-10-14 12:34:10

标签: ios iphone uitableview uitextfield

我有UITableViewController个自定义UITableViewCell。每个单元格包含UITextField。现在我想要的是在按下返回键时将控件从一个文本字段移动到每个下一个文本字段。 我要做的就是这个......

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSIndexPath *currentIndexPath=[self.tableView indexPathForCell:(UITableViewCell*)textField.superview.superview];
    if(currentIndexPath.row<_excerciseData.totalBlanks-1){
        NSIndexPath nextIndexPath=???
        UITextField *nextTextFeild=[(UITableViewCell*)[self.tableView cellForRowAtIndexPath:nextIndexPath] viewWithTag:2];
        [nextTextFeild becomeFirstResponder];
    }else{

[textField resignFirstResponder];
}
return YES;
}

但为此我不知道,如何找到下一个UITableViewCell的indexPath。任何人都可以帮我找到这个吗?这......:)

4 个答案:

答案 0 :(得分:0)

由于您已有自定义表视图单元格,因此最简单的解决方案是添加包含索引路径的属性。然后在您返回单元格的委托方法中,只需将当前索引路径分配给稍后可能使用的单元格。

对于剖面中的最后一个单元格或表格视图本身,这不会很好。你应该做的是从单元格本身向表视图所有者(视图控制器)报告事件,然后可以计算下一个单元索引是什么:如果你有多个部分,它必须检查它是否应该转到新的部分和如果它是最后一个单元格,则根本不做任何事情(或者如果你愿意,可以转到表格视图的开头)。

要转发消息,您可以尝试以下答案中提到的其中一个程序:IOS: Navigate through tableView and show table view data on next view

为了清楚起见,文本字段委托应该是单元格本身!

答案 1 :(得分:0)

你最好能做到这一点,

CGPoint pointInTable = [field convertPoint:field.bounds.origin toView:_tableView];    

NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:pointInTable];

参考:How to get a UITableViewCell from one of its subviews

或者这样做,

id view = [textfield superview];

while (view && [view isKindOfClass:[UITableViewCell class]] == NO) {
    view = [view superview]; 
}

UITableViewCell *tableViewCell = (UITableViewCell *)view;

参考:How to get UITableView from UITableViewCell?

答案 2 :(得分:0)

更好的方法是使用textField的标记属性。这样做。

使用cellForRowAtIndexPath创建单元格时 为单元格内的textField提供一个标记值,如:

cell.yourTextField.tag = indexPath.row + someConstant; // someConstant is just to make sure that there is no textfield with the same tag value

并在textField委托中:- (BOOL)textFieldShouldReturn:(UITextField *)textField实现以下内容。

// Jumping with the keyboard Next button implementation.
if (UIReturnKeyNext == textField.returnKeyType) //may be u can avoid this check
{
    id nextField = [self viewWithTag:textField.tag + 1];
    if ([nextField isKindOfClass:[UITextField class]])
    {
        [nextField becomeFirstResponder];
    }
}

希望textFieldDelegates在tableview的所有者类中实现。

答案 3 :(得分:0)

这里的解决方案

=INDEX(C:C;MATCH("search text";A:A;))