在uitableview的文本字段之间导航

时间:2010-08-12 11:06:14

标签: iphone uitableview navigation uitextfield

我正在制作一个coredata应用程序,其中我被指示在每行成功制作带有textfield的tableview(填充表单)。然后我创建了一个带有上一个和下一个按钮的工具栏,并添加到textField的inputAccsoryView,用于在每个单元格的文本字段之间导航。每行一个文本字段。我也可以使用上一个和下一个按钮方法进行魔术。现在问题是:

  

假设我有3个部分。在第一节4行。在第二部分6行和最后一部分1行。现在,当我从第一行开始并按下一行直到第11行它正常工作但接下来我按下没有任何事情发生,因为第一行出列我得到“零”。我正在使用的代码:

配置单元格

if (cell == nil) {
    NSLog(@"tag inside:%i",tag);

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1
                                   reuseIdentifier:identifier] autorelease];


    UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(120, 10, 170, 25)];

    theTextField.textAlignment = UITextAlignmentRight;  

    theTextField.delegate = self;

    theTextField.tag = tag;
    theTextField.inputAccessoryView = [self configureTheToolBar];
    [theTextField setKeyboardAppearance:UIKeyboardAppearanceAlert];


    [cell.contentView addSubview:theTextField];
    [theTextField release];

}

cell.textLabel.text = rowLabel;
UITextField *textField = (UITextField *)[cell.contentView viewWithTag:tag];
textField.text = rowValue

我为601,602等文本字段提供标签。

然后获取currentTextField标记

- (void)textFieldDidBeginEditing:(UITextField *)textField{

    currentTextField = textField.tag;
}

然后是下一个方法

if(currentTextField == 611){
        currentTextField = 601;     
    } else{
        currentTextField = currentTextField + 1;
    }
    NSLog(@"current text fiedld = %i",currentTextField);

    NSLog(@"text ; %@",[self cellForTag:currentTextField].textLabel.text);

        UITextField *firstResponderField = (UITextField *) [[self cellForTag:currentTextField].contentView viewWithTag:currentTextField];

        [firstResponderField becomeFirstResponder];

和cellForTag方法:

-(UITableViewCell *)cellForTag:(NSInteger)tag{




     UITableViewCell *cell;
            switch (tag) {
                case 601:{


                    NSUInteger onlyRow[] = {0, 0}; 
                    NSIndexPath *onlyRowPath = [NSIndexPath indexPathWithIndexes:onlyRow length:2]; 
                    //[self.tableView scrollToRowAtIndexPath:onlyRowPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

                    cell = [self.tableView cellForRowAtIndexPath:onlyRowPath];

                    break;
}
    return cell

此代码部分工作,因为一旦屏幕单元格内存不足,我无法访问该单元格中的文本字段,并且下一个按钮将停止工作,直到currentTextfield值达到任何可见行。可能是什么解决方案。 我的筹码过多了。 :)


Ok this线程可以解决问题,但我不知道如何。谁能解释我怎么样?

1 个答案:

答案 0 :(得分:0)

一旦细胞离开屏幕,它将无法再访问。因此,您可能希望在用户通过连接UIControlEventEditingDidEnd事件完成编辑后立即获取文本字段的值:

[myTextField 
   addTarget:self 
   action:@selector(myTextChanged:) 
   forControlEvents:UIControlEventEditingDidEnd];

在myTextChanged函数中,您可以将值存储起来,如果您希望将它们与标记保持一致,可以将其存储在字典中。