0

我有一个添加了分组表视图的 ViewController。一些单元格包含文本字段。当用户按下返回键时,我想将第一响应者切换到单元格列表中的下一个文本字段。但是,我无法让它工作,我无法判断我是否选择了不正确的单元格或选择了不正确的文本字段。

我正在使用以下内容在 cellForRowAtIndexPath 中设置我的标签。

cell.tag = ((indexPath.section + 1) * 10) + indexPath.row;

这将创建一个标签,其中十位是节值,个位是行值。IE。标签 11 是第 0 行第 1 行。

这是我的 textFieldShould Return 的代码

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

[textField resignFirstResponder];

UITableViewCell *cell = (UITableViewCell *)textField.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath];

if (indexPath.section == 0)
{
    if (indexPath.row == 0)
    {
        [[cell viewWithTag:((indexPath.section + 1) * 10) + (indexPath.row + 1)] becomeFirstResponder];
    }
    if (indexPath.row == 1)
    {
        [[cell viewWithTag:((indexPath.section + 2) * 10)] becomeFirstResponder];
    }
}
return YES;
}

最后一点,目前新标签的增量是硬编码的,但我希望能够转到新标签而无需每次硬编码实际值。这可能吗?

4

2 回答 2

3

如果您的所有单元格都包含 1 个 UITextField,我会说您可以继承 UITableViewCell 并添加一个引用单元格文本字段的属性,就像我在这里所做的那样。

但是你说只有你的一些单元格包含一个文本字段,所以另一个选择是创建一个指向 UITextFields 的指针数组(我在这里得到了这个想法)。然后按 Return 的用户将像这样循环浏览它们:

- (BOOL) textFieldShouldReturn:(UITextField*)textField {
    NSUInteger currentIndex = [arrayOfTextFields indexOfObject:textField] ;
    if ( currentIndex < arrayOfTextFields.count ) {
        UITextField* nextTextField = (UITextField*)arrayOfTextFields[currentIndex+1] ;
        [nextTextField becomeFirstResponder] ;
    }
    else {
        [textField resignFirstResponder] ;
    }
}
于 2013-02-13T17:22:34.747 回答
1

将标签设置为您的 textField 而不是单元格。

yourTextField.tag = ((indexPath.section + 1) * 10) + indexPath.row;
于 2013-02-13T17:34:56.280 回答