我的UITableView出现了一个奇怪的故障/错误。一切都很好,但是,当我向下滚动到第二个单元格并回到第一个单元格时,第一个单元格中的标签文本变得与第二个单元格中的相同...我不确定为什么这种情况正在发生,请你好好看看我的代码并帮助我。
代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifer = [NSString stringWithFormat:@"CellIdentifier%i",num];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
}
UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
titleL.text = myTitle;
[cell addSubview:titleL];
return cell;
}
-(void) makeMeADreamer {
for (int i = 0; i < arr.count; i++) {
PFQuery *query = [PFQuery queryWithClassName:@"DreamBits"];
[query whereKey:@"objectId" equalTo:[arr objectAtIndex:i]];
[query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError *error) {
if (!object) {
} else {
myTitle = [object objectForKey:@"title"];
num = i;
[feed beginUpdates];
[feed reloadRowsAtIndexPaths:myArr withRowAnimation:UITableViewRowAnimationAutomatic];
[feed endUpdates];
}
}];
}
}
答案 0 :(得分:0)
尝试替换此代码:
UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
titleL.text = myTitle;
[cell addSubview:titleL];
到willDisplayCellForRowAtIndexPath:
方法。您在两个单元格中都有相同的标签文本,因为您的第二个单元格已从第一个单元格及其所有子视图中出列。
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellId = @"messagesCell";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (!cell)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
return cell;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
titleL.text = myTitle;
[cell addSubview:titleL];
}
答案 1 :(得分:0)
您以错误的方式创建tableViewCell
。每次表视图重新加载时,您都会创建一个标签并将其添加到单元格中。因此,如果向下和向上滚动,您可能会看到许多标签。您应该只创建一个标签并重复使用它。请尝试以下代码
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifer];
UILabel *titleL = [[UILabel alloc] initWithFrame:CGRectMake(10,10,300,20)];
titleL.tag = 1234;
[cell.contentView addSubview:titleL];
}
UILabel *titleL = (UILable*)[cell.contentView viewWithTag:1234];
titleL.text = myTitle;