带文本字段的iOS UITableViewCell

时间:2014-10-14 12:23:38

标签: ios objective-c uitableview

我的UITableViewCell中有一个UITextField。此单元格包含最多3位数字符串,我可以编辑。到目前为止一切都那么好;)现在我已经在键盘上的UIToolbar上创建了上一个和下一个按钮,该按钮也可以正确显示。

现在我要做下一个实现:

- (void) didPressNext:(Cell *)cell
{
    NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
    NSInteger maxRows = [_tableView numberOfRowsInSection:indexPath.section];
    NSInteger maxSections = [_tableView numberOfSections];

    if (maxRows > (indexPath.row + 1)) { //In the same section
        NSIndexPath *next = [NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section];
        Cell * nextCell = (Cell *)[_tableView cellForRowAtIndexPath:next];

        [_tableView scrollToRowAtIndexPath:next atScrollPosition:UITableViewScrollPositionBottom animated:NO];
        [nextCell becomeFirstResponder];

    } else if (maxSections > (indexPath.section + 1)) { //Is there a next section
        maxRows = [_tableView numberOfRowsInSection:indexPath.section + 1];
        if (maxRows != 0) { //If there are any
            NSIndexPath *next = [NSIndexPath indexPathForItem:0 inSection:indexPath.section + 1];

            Cell * nextCell = (Cell *)[_tableView cellForRowAtIndexPath:next];
            if (nextCell.shirtNumber && !nextCell.shirtNumber.hidden) { //Contains a shirtNumber?
                [_tableView scrollToRowAtIndexPath:next atScrollPosition:UITableViewScrollPositionBottom animated:NO];

                [nextCell becomeFirstResponder];
            }
        }
    }
}

在我的单元格中,我覆盖了这些方法:

- (BOOL) canBecomeFirstResponder{
    return YES;
}

- (BOOL) isFirstResponder
{
    return [_shirtNumber isFirstResponder];
}

- (BOOL) becomeFirstResponder
{
    return [_shirtNumber becomeFirstResponder];
}

- (BOOL) resignFirstResponder
{
    return [_shirtNumber resignFirstResponder];
}

这个过程在某些时候正常工作,有时当我按两次时。动画总是有效,所以我知道我正确计算了下一个indexPath。

我在这里做错了什么?

问题是:"为什么有时候第一个响应者没有工作并且没有返回"

1 个答案:

答案 0 :(得分:0)

在第一个结尾,如果你得到[nextCell becomeFirstResponder]; 显然细胞不能成为第一反应者。 应该是[nextCell.shirtNumber becomeFirstResponder];