我必须在这里找到一些简单的东西,但它逃脱了我。在用户将新人输入可变数组后,我想更新表。可变数组是数据源。我相信我的问题在于cellForRowAtIndexPath
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TextFieldCell *customCell = (TextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"TextCellID"];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (indexPath.row == 0) {
if (customCell == nil) {
NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TextFieldCell" owner:nil options:nil];
for (id currentObject in nibObjects) {
if ([currentObject isKindOfClass:[TextFieldCell class]])
customCell = (TextFieldCell *)currentObject;
}
}
customCell.nameTextField.delegate = self;
cell = customCell;
}
else {
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name];
NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]);
NSLog(@"peopleArray's Size = %d", [self.peopleArray count]);
}
}
return cell;
}
当我第一次加载视图时,一切都很棒。这就是打印:
PERSON AT ROW 0 = Melissa
peopleArray's Size = 2
PERSON AT ROW 1 = Dave
peopleArray's Size = 2
在我将某人添加到该数组后,我得到了这个:
PERSON AT ROW 1 = Dave
peopleArray's Size = 3
PERSON AT ROW 2 = Tom
peopleArray's Size = 3
当我添加第二个人时,我得到了:
PERSON AT ROW 2 = Tom
peopleArray's Size = 4
PERSON AT ROW 3 = Ralph
peopleArray's Size = 4
为什么不打印阵列中的所有人?这种模式仍在继续,它只打印两个人,而且总是最后两个人。我错过了什么?
--- 已更新 ---
确定。我的细胞没有正确更新,我想我的建议是为了帮助我。我想这不是主要问题。
我的问题是我的行没有打印正确的信息。当视图第一次加载时,我得到:
Melissa
Dave
但在我添加Tom之后,我得到了:
Melissa Dave
Melissa or Dave
Tom Tom
在我添加拉尔夫后,我得到:
Melissa ?
Tom or ?
Tom Tom
Ralph Ralph
发生了什么事?
答案 0 :(得分:1)
问题是您没有更新重复使用的单元格的标签。在新创建单元格时,您只需设置一次。所以将代码更改为:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name];
NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]);
NSLog(@"peopleArray's Size = %d", [self.peopleArray count]);
答案 1 :(得分:1)
你在cellForRowAtIndexPath中调用NSLog就是这个原因。 它是第一次记录所有内容,因为单元格是新的,但在此之后,单元格将保持缓存状态,直到它们离开屏幕。由于您的表很小,所以第一个单元格始终在屏幕上,从不重新创建。如果你想监控数据源而不是单元格,请尝试将NSLog移动到其他地方(如果加载大表,滚动它并观察控制台,你可以看到我的意思)