2010-08-12 59 views
0

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

假设我有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值达到任何可见行。可能是什么解决方案。 我的堆栈溢出了。 :)


this线程的伎俩,但我不知道怎么办。任何人都可以解释我如何?

回答

0

一旦细胞熄灭屏幕,它将不再可用。正因为如此,你可能想尽快通过连线了UIControlEventEditingDidEnd事件作为用户已经完成编辑他们抓住你的文本字段的值:

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

在你myTextChanged功能,您可以存储值了,也许在一个字典,如果你想保持他们对你的标签键入。