1

我想知道是否有人知道如何解决这个问题:

我有一个 UITableview,其中数据源可以继续增长。问题是当我向数据源添加元素时,表格单元格会变得混乱。

每个表格单元格都有一个文本字段,用户可以在其中输入数据,但是每当我将数据添加到数据源时,注释就会复制到其他单元格。

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

static NSString *cellIdentifier = @"ImageTableCell";
ImageTableCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

Picture *aPicture = (Picture *) [self.imageData objectAtIndex:[indexPath row]];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ImageTableCell" owner:self options:NULL];
    cell = (ImageTableCell *)[nib objectAtIndex:0];
}

NSLog(@"comment %@ index %d", aPicture.comment, [indexPath row]);

cell.cellImage.image = aPicture.picture;
cell.commentField.delegate = self;
cell.commentField.text = aPicture.comment;
cell.index = [indexPath row];
cell.tag = [indexPath row];

return cell;
}

self.imagedata 是一个 NSMutabaleArray。

编辑

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


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.imageData count];
}

-(void) reloadImages:(NSNotification *) aNotification {

self.imageData = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).currentUserData.images;

[self.imageTableView reloadData];
}

截图 http://www.mikerizzello.com/pic.png

谢谢

4

2 回答 2

0

编辑:

我认为你可能有一个糟糕的 MVC 模式。这是我要做的:

使用您的自定义单元格 ImageViewCell,并将该类设置为您的 textField 委托。为您的自定义图片对象添加一个属性,并在 cellForRow 中设置它...

然后,在自定义单元格类中的 textFieldDelegate 方法中,您可以在那里更改设置 PictureObject 的内容。我有一种感觉,您正在处理 viewController 中的文本输入,并且数组中数据对象的索引变得混乱,并且您将注释字段文本应用于数组中的错误项目。

编辑

我认为这与细胞重用有关。重复使用单元格时,单元格的内容不会被清除。

在返回单元格之前尝试此块:

if (!aPicture.comment) {
    cell.commentField.text = @"";
} else {
    cell.commentField.text = aPicture.comment;
}
于 2013-08-14T20:55:56.813 回答
0

你试过吗

if (cell == nil) {
    cell = (ImageTableCell*)[[ImageTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

无论如何,您也可以为每个单元格设置不同的重用标识符,但这不是一个好主意,我想帮助您,但我认为需要运行这个项目。

如果上面的代码提供更好的解决方案,请告诉我。

于 2013-08-15T00:16:34.940 回答