移动到分组TableView中不同单元格中的下一个UITextField

时间:2013-02-13 16:58:01

标签: iphone ios objective-c xcode ipad

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

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

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

这将创建一个标签,其中十位是一个区段值,而那些位置是行值。即。标签11是第0行第1行。

这是我的textFieldShould返回的代码

- (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;
}

最后要注意的是,目前新标签的增量是硬编码的,但我希望能够在没有每次硬编码实际值的情况下转到新标签。这可能吗?

2 个答案:

答案 0 :(得分:3)

如果你的所有单元格都包含1个UITextField,我会说你可以继承UITableViewCell并添加一个引用单元格文本字段like I did here的属性。

但是你说只有你的一些单元格包含一个文本字段,所以另一种选择是创建一个指向UITextFields的指针数组(我得到了here的想法)。然后用户按下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] ;
    }
}

答案 1 :(得分:1)

将标记设置为textField而不是单元格。

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