iOS:uitableview在第一个单元格到底部单元格上重绘对象

时间:2013-02-19 09:52:14

标签: ios uitableview scroll

我有自定义单元格的uitableview ..正常代码

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    DDMainCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    if (cell == nil)
    {
        cell = [[DDMainCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];



    }
}

问题是,当我选择一个单元格时,我在网上下载数据的单元格上添加进度条..但是当我向下滚动时,我发现每10个单元格都有相同的进度条..我该如何防止这种行为?

3 个答案:

答案 0 :(得分:1)

试试这个,

 - (void)viewDidLoad
 {
[super viewDidLoad];
dataarr=[[NSMutableArray alloc]init];
indexarr=[[NSMutableArray alloc]init];
mytableview=[[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
mytableview.dataSource=self;
mytableview.delegate=self;
[self.view addSubview:mytableview];
for (int i=0; i<30; i++) {
    [dataarr addObject:[NSString stringWithFormat:@"%d",i]];
}
// Do any additional setup after loading the view, typically from a nib.
 }


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
 return [dataarr count];
 }

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


static NSString *CellIdentifier = @"Cell";

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] ;
}
cell.textLabel.text=[dataarr objectAtIndex:indexPath.row];
UIActivityIndicatorView *act=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[act setFrame:CGRectMake(50, 20, 20, 20)];
act.hidden=YES;

[cell.contentView addSubview:act];
cell.selectionStyle=UITableViewCellSelectionStyleNone;
if ([indexarr containsObject:[dataarr objectAtIndex:indexPath.row]])
{
    [act startAnimating];

    act.hidden=NO;
    return  cell;

}


return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

 if ([indexarr containsObject:[dataarr objectAtIndex:indexPath.row]])
{
    [mytableview reloadData];

    return;
}
[indexarr addObject:[dataarr objectAtIndex:indexPath.row]];
[mytableview reloadData];

}

确保在下载完成后,从indexarr中删除此对象....

答案 1 :(得分:0)

那是因为你的细胞正在被重复使用;如果UITableView匹配,reuseIdentifier会将屏幕外单元格放入可重复使用的单元格队列中,并将它们出列以便重复使用。您应该使用其他一些数据结构(例如NSArrayNSDictionary)来跟踪已经分类的索引/单元格。然后,在上面显示的方法中,无论单元格是初始化还是出列,都要根据基础数据结构设置进度条。

答案 2 :(得分:-1)

此处,您使用的UITableViewCellIdentifierreuseIdentifier。哪个适用于所有Cell都属于同一类型。现在你正在进行一次带有进度条的单元格。现在它将与所有细胞数据不同。

因此,为进度条使用一个tableview单元格,或者在重新加载表时删除已存在的进度条并再次添加。用于进度条的此用途标记。