2011-08-05 86 views
2

我試圖有一個UITableView,我可以動態添加和刪除行,並且行中有一個UITextField。對於添加的行,我正在使用的代碼:動態添加UITextField與UITableViewCell

- (void) addRow 
    { 
     [nameArray addObject:[NSString stringWithFormat:@"%i", x]]; 
     [self.tableView reloadData]; 
     x++; 
    } 

而我只是在做nameArray的計數來得到我有多少行已經在我的tableView。然後,在cellForRowAtIndexPath,我有以下代碼

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    /*Default Apple-y stuff*/ 
    ... 
    if ([indexPath row] == 0) { 
     playerTextFieldZero = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)]; 
     playerTextFieldZero.adjustsFontSizeToFitWidth = YES; 
     playerTextFieldZero.placeholder = @"Name"; 
     playerTextFieldZero.textColor = [UIColor blackColor]; 
     playerTextFieldZero.returnKeyType = UIReturnKeyDone; 
     playerTextFieldZero.backgroundColor = [UIColor whiteColor]; 
     playerTextFieldZero.autocorrectionType = UITextAutocorrectionTypeNo; // no auto correction support 
     playerTextFieldZero.textAlignment = UITextAlignmentLeft; 
     playerTextFieldZero.tag = 0; 
     playerTextFieldZero.delegate = self; 
     playerTextFieldZero.clearButtonMode = UITextFieldViewModeNever; // no clear 'x' button to the right 
     [playerTextFieldZero setEnabled: YES]; 
     [cell addSubview:playerTextFieldZero]; 
     [playerTextFieldZero becomeFirstResponder]; 
     [playerTextFieldZero release]; 
    } 
    ... 
    /*More of those in here*/ 
    ... 
return cell; 
} 

我有這個代碼的多個問題。第一個問題是我做了預設數量的UITextFields,以便我可以在textFieldShouldReturn中調用它們。有沒有一種方法可以讓我生成UITextFields,當我按下done鍵時會返回?

我現在這樣做的第二大問題是我的UITextFields在每次添加新的時候都會被清除。任何想法爲什麼?

回答

7

解決您的第一個問題我將開始拉動的UITextField創建代碼到一個方法..

- (UITextField*)textFieldForCell:(UITableViewCell*)cell withDelegate:(id<UITextFieldDelegate>*)delegate { 
    UITextField textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10, 185, 30)]; 
    textField.delegate = self; 
    .... 
    [cell addSubview:playerTextFieldZero]; 
    [textField release]; 
} 

在您的tableView然後調用新方法:的cellForRowAtIndexPath:方法...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ... 
    // Custom initialization code  
    [self textFieldForCell:cell withDelegate:self]; 
} 

現在要確保您的UITextField對回車鍵的響應實現您的UITextFieldDelegate(可能是您的UITableViewController)的textFieldShouldReturn:方法始終返回true ...

-(bool)textFieldShouldReturn:(UITextField*)textField { 
    return YES; 
} 

至於你的第二個問題,我相信這是直接調用reloadData的結果。這將迫使你的UITableView重新創建它的單元格。這又會重新創建您的UITextFields,然後您將丟失其狀態/文本。我認爲你的下一個邏輯步驟是引入一個存儲每個UITextField狀態的模型(NSMutableArray)。您可以先在UITextFieldDelegate接收到textFieldShouldReturn消息時將字段的文本保存到數組中。

+0

非常好!這很好地回答了我的問題。 –

+0

你是偉人! – IKKA

相關問題