Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS-UITableView更改数据源_Iphone_Ios_Objective C_Uitableview - Fatal编程技术网

Iphone iOS-UITableView更改数据源

Iphone iOS-UITableView更改数据源,iphone,ios,objective-c,uitableview,Iphone,Ios,Objective C,Uitableview,我想知道是否有人知道如何解决这个问题: 我有一个UITableview,其中数据源可以继续增长。问题是,当我向数据源添加元素时,表格单元格会被弄乱 每个表单元格都有一个文本字段,用户可以在其中输入数据,但每当我向数据源添加数据时,注释都会复制到其他单元格 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString

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

我有一个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

编辑

谢谢

编辑:

我想你可能有一个糟糕的MVC模式。下面是我要做的:

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

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

编辑

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

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

if (!aPicture.comment) {
    cell.commentField.text = @"";
} else {
    cell.commentField.text = aPicture.comment;
}
你试过吗

if (cell == nil) {
    cell = (ImageTableCell*)[[ImageTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
无论如何,您也可以为每个单元格设置不同的reuseIdentifier,但这将是一个坏主意,我想帮助您,但我认为需要运行此项目


请让我知道,如果上述代码提供更好的解决方案

如何添加以及之后如何刷新表?我只是向数据源添加一个Picture对象,并让上面的方法为刷新执行相同的操作。我只需调用[self.tableview reloadData]@Mikerizzo请显示其余的数据源方法当你将有问题的“不正确”单元格从屏幕上滚动一段时间后会发生什么情况,然后再将它们向后滚动?不会太多,除非我遗漏了一些内容。你有解决方案的示例吗?而且,这样做,我将无法控制屏幕。在我使用视图控制器作为代理时,它允许我在键盘打开时上下移动屏幕。没有示例,但您可以在视图控制器中侦听UIKeyboard通知。你知道我指的是什么吗?不,但你的意思是在视图控制器中创建NSNotifications,并在自定义单元格中调用这些通知时发布这些通知吗?不,将你的视图控制器添加为@UIKeyboardDidShowNotification“的观察者,并以这种方式处理视图滚动逻辑。键盘会自动发布通知。它在解雇我们时发布了相应的UIKeyboardDidHideNotification
if (cell == nil) {
    cell = (ImageTableCell*)[[ImageTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}