滚动文本字段值的Tableview不会持久化

时间:2011-07-01 09:52:56

标签: iphone objective-c cocoa-touch uitableview

我在Table视图单元格上有UITableViewUITextField。用户UITextField在文本字段中输入一些值,然后滚动表视图。文本字段上的值不会保留。下面的代码

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {  
return 100; 
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier    = @"Cell";
static NSString *CellIdentifierFirst    = @"CellFirst";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierFirst];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];

}

NSArray *cellSubs = cell.contentView.subviews;
for (int i = 0 ; i < [cellSubs count] ; i++) {
    [[cellSubs objectAtIndex:i] removeFromSuperview];
}

cell.selectionStyle = UITableViewCellSelectionStyleNone;

UITextField * textFieldRounded = [[UITextField alloc] initWithFrame:CGRectMake(100, 5, 150, 40)];
textFieldRounded.borderStyle = UITextBorderStyleNone;
textFieldRounded.textColor = [UIColor blackColor]; 
textFieldRounded.font = [UIFont systemFontOfSize:17.0];  
textFieldRounded.placeholder = @"Type here"; 
textFieldRounded.backgroundColor = [UIColor whiteColor]; 
textFieldRounded.autocorrectionType = UITextAutocorrectionTypeNo;   
textFieldRounded.keyboardType = UIKeyboardTypeDefault;  
textFieldRounded.returnKeyType = UIReturnKeyDone;  
textFieldRounded.clearButtonMode = UITextFieldViewModeWhileEditing; 
textFieldRounded.delegate = self;   
[cell.contentView addSubview:textFieldRounded];
return cell;
}

所以请大家帮帮我

2 个答案:

答案 0 :(得分:3)

我的一个应用程序中有相同的功能,我使用下面的代码来实现这一点,我从来没有遇到过这种问题。

首先,您需要将所有textField值临时存储在Array中。像这样制作数组。

arrTemp=[[NSMutableArray alloc]initWithObjects:[NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],
     [NSString stringWithFormat:@""],nil];

然后给所有textField标签= indexPath.row;

之后您需要在以下两种方法中替换textField值。

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
   [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}

-(void)textFieldDidEndEditing:(UITextField *)textField{
 [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}

最后您需要在cellForRowAtIndexPath数据源方法中设置该值。因此,无论何时用户滚动tableview,它都会从临时数组中设置以前的值。像这样。

cell.txtEntry.text = [arrTemp objectAtIndex:indexPath.row];

我可能忘记了一些要粘贴的代码。所以,如果您有任何问题,请告诉我。

答案 1 :(得分:0)

您需要为所有行维护一个可变数组。每次更改文本时都必须将文本存储在该数组中,并在调用cellForRowAtIndexPath:时设置数组中的文本。