2010-08-12 70 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功能,您可以存儲值了,也許在一個字典,如果你想保持他們對你的標籤鍵入。