设备旋转后TableView内容发生变化

时间:2012-10-13 23:29:21

标签: ios uitableview

我有一个包含3个部分的表视图的应用程序。一切都可以显示数据,但是当我更改设备方向(从纵向到横向,反之亦然)时,我的表格中会添加额外的行数

的确,在调试我的应用程序时,我发现每次旋转设备时都会执行cellForRowAtIndexPath:

有些好人可以告诉我如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:1)

正如所怀疑的那样,您的问题是您在tableView:numberOfRowsInSection:方法中向数据源数据添加项目。每次表询问一个部分中有多少行时,都会向数据结构添加更多数据。请记住,数据源方法将被调用很多次。

您需要在任何数据源方法之外创建一次数据结构。关于数据结构,您的数据源方法应该是只读的。他们应该简单地返回一个计数。不应在数据源方法中进行其他处理。

答案 1 :(得分:0)

这是代码!!!

`- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section==0) {
    for (int i=0; i < self.TiersArray.count; i++) {
         if (([[[self.TiersArray objectAtIndex:i]t_client] isEqualToNumber:one])||        ([[[self.TiersArray objectAtIndex:i]t_client] isEqualToNumber:three])) 
   {
            [ClientsArray addObject:[self.TiersArray objectAtIndex:i]];
        }

    }
return self.ClientsArray.count;
}
else if(section==1){
    for (int i=0; i < self.TiersArray.count; i++) {
        if (([[[self.TiersArray objectAtIndex:i]t_client]isEqualToNumber:two])||([[[self.TiersArray objectAtIndex:i]t_client]isEqualToNumber:three])) {
            [ProspectsArray addObject:[self.TiersArray objectAtIndex:i]];
        }

    }
    return self.ProspectsArray.count;
}
else{
    for (int i=0; i < self.TiersArray.count; i++) {
        if ([[[self.TiersArray objectAtIndex:i]t_fournisseur] isEqualToNumber:one ]) {
            [FournisseurArray addObject:[self.TiersArray objectAtIndex:i]];
        }

    }
    return self.FournisseurArray.count;
}
}

`