向上滚动时,自定义TableViewCell值消失

时间:2011-11-01 08:54:53

标签: iphone cocoa-touch uitableview custom-controls

在我问这个问题之前,我经常搜索并看到一些答案,但没有一个可以帮助我,所以我决定再问一遍,...感谢您的帮助

我知道有两种方法可以解决这个问题,一种是将tableviewcell值存储在数组中,另一种是避免重用它,但我无法实现它们,

我有自己的tableviewcell里面有一个文本字段和一个按钮,当一个按钮点击一个在tableview底部添加另一个tableviewcell时;

当我实现第一个解决方案时,我从textfield.supperview获取tableviewcell,如下所示:

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    NSLog(@"TextFileld Value : %@" , textField.text);

    DivideTableViewCell *cell = (DivideTableViewCell *)textField.superview;

    NSIndexPath *indexPath = [uiTableView indexPathForCell:cell]; 

    NSLog(@"index Path %i" , indexPath.row);
}

但每次indexPath.row为0且我都无法更新我的数据源数组....

并且不幸的是我也无法实施第二个解决方案......

非常感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

如果您需要存储TableViewCells,请尝试以下操作。

在TableViewController的init方法中有一个NSMutableDictionary实例变量并对其进行alloc / init(不要忘记在dealloc中释放它)。

- (id)init {
  self = [super init];
  if (self) {
    ivarDictionary = [[NSMutableDictionary alloc] init];
  }
  return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  DivideTableViewCell *cell = [ivarDictionary objectForKey:[NSNumber numberWithInt:indexPath.row]];

  if (!cell) {
    cell = [[DivideTableViewCell alloc] init];
    [iverDictionary setObject:cell forKey:[NSNumber numberWithInt:indexPath.row]];
    // Cell setup 1
  }

  // Cell setup 2

  return cell;
}

从那里你可以在Setup 1区域设置你需要的所有单元,或者如果你想在每次调用单元时进行一些设置,那么使用Setup 2。

请注意,在最小化内存使用方面,这不是一个好主意,我不会将此方法用于超过20-30个单元格的任何内容。

您仍然需要使用TextField委托方法来提取输入的文本,您可能还需要在创建时将indexPath变量解析为每个单元格,这样您就可以知道正在编辑哪个文本字段。

答案 1 :(得分:0)

I  Think you should store all the values of the text field in an array and replace with the changed value every time like i did,see my code ,

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CustomCell"; {
    CustomCell *cell = (CustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; for (id currentObject in topLevelObjects) { if ([currentObject isKindOfClass:[UITableViewCell class]]) { cell = (CustomCell ) currentObject; break; } } } cell.capitalLabel.text =[capitals objectAtIndex:indexPath.row]; cell.stateLabel.text = [states objectAtIndex:indexPath.row]; cell.t1.delegate=self; cell.t1.tag=indexPath.row; cell.t1.text=[arrTemp objectAtIndex:indexPath.row]; cell.s1.backgroundColor=[UIColor grayColor]; cell.s1.contentSize=CGSizeMake(1000, 40); return cell; } } /-(BOOL)textFieldShouldReturn:(UITextField *)textField { [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text]; } */ -(void)textFieldDidEndEditing:(UITextField *)textField{ [arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text]; }