滚动tableview时,UIProgressView会隐藏

时间:2012-06-18 09:51:21

标签: iphone multithreading uitableview asihttprequest uiprogressview

在我的iphone应用程序中,我有一个按钮,当我点击按钮时,下载操作开始,我正在用UIProgressView替换按钮。此UIProgressView将显示下载进度。但是一旦添加了UIProgressView,当我滚动它时就消失了。这是我的代码:

    // Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";

        UIMenuItemCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if(cell == nil)
            cell = [self getCellContentView:CellIdentifier];

        cell.cellitemImage = (UIImageView *)[cell viewWithTag:2];
        cell.cellItemButton = (UIButton *)[cell viewWithTag:3];

        DataBaseClass *itemObj = [appDelegate.itemArray objectAtIndex:indexPath.row];
        NSString *url;
        if([itemObj.itemStatus isEqualToString:@"Available"]){
            cell.cellItemButton.userInteractionEnabled = YES;
            cell.userInteractionEnabled = YES;
            [cell.cellItemButton setTitle:@"" forState:UIControlStateNormal];
            [cell.cellItemButton setBackgroundImage:[UIImage imageNamed:@"img_normal"] forState:UIControlStateNormal];
            [cell.cellItemButton setBackgroundImage:[UIImage imageNamed:@"img_pressed"] forState:UIControlStateHighlighted];
            [cell.cellItemButton addTarget:self action:@selector(download) forControlEvents:UIControlEventTouchUpInside];
            url = [NSString stringWithFormat:@"%@",itemObj.availableIcon];
        }else if([itemObj.itemStatus isEqualToString:@"Downloading"]){
            url = [NSString stringWithFormat:@"%@",itemObj.availableIcon];
            [cell.contentView addSubview:myprogressView];
            cell.cellItemButton.hidden = YES;
        }

        [cell.cellitemImage setImageWithURL:[NSURL URLWithString:url] placeholderImage:[UIImage imageNamed:@"item01.png"]];

        cell.cellItemName.text = [NSString stringWithFormat:@"%@",itemObj.itemName];

        return cell;
    }

- (void)download{
        UIButton *btn = (UIButton *)clickedBtnSender;
        UIMenuItemCell *cell = [(UIMenuItemCell *)[[clickedBtnSender superview] superview] retain];
         myprogressView = [[[CustomProgressView alloc]initWithFrame:CGRectMake(25, 140, 100, 21)] retain];
        myprogressView.tag = selectedTag;

        btn.hidden = YES;

        for (UIProgressView *currentProgress in cell.contentView.subviews) {
            if ([currentProgress isKindOfClass:[UIProgressView class]]){
                [currentProgress removeFromSuperview];
            }
        }

        [cell.contentView addSubview:myprogressView];
}

请帮忙。

修改

- (UIMenuItemCell *) getCellContentView:(NSString *)cellIdentifier {

    CGRect CellFrame = CGRectMake(0, 0, 150, 60);
    CGRect imgFrame = CGRectMake(20, 48, 110, 123);
    CGRect btnFrame = CGRectMake(25, 140, 100, 26);
    CGRect progressFrame = CGRectMake(25, 140, 100, 21);


    UIImageView *itemImg;
    UIButton *itemBtn;
    UIProgressView *itemProgView;

    UIMenuItemCell *cell = [[UIMenuItemCell alloc] init] ;
    cell.frame = CellFrame;

    //Initialize ImageView
    itemImg = [[UIImageView alloc]initWithFrame:imgFrame];
    itemImg.tag = 2;
    [cell.contentView addSubview:itemImg];

    //Initialize Button
    itemBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    itemBtn.frame = btnFrame;
    itemBtn.tag = 3;
    itemBtn.titleLabel.textColor = [UIColor blueColor];
    itemBtn.titleLabel.font = [UIFont systemFontOfSize:9.0];
    [cell.contentView addSubview:itemBtn];

    //Initialize ProgressView
    itemProgView = [[CustomProgressView alloc]initWithFrame:progressFrame];
    itemProgView.tag = 4;
    //[cell.contentView addSubview:itemProgView];

    return cell;
}

1 个答案:

答案 0 :(得分:0)

我认为您需要为每个单元格提供唯一的cellIdentifier

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d", indexPath.row];

        UIMenuItemCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if(cell == nil) {
            cell = [self getCellContentView:CellIdentifier];

            // Some codes here
        }

       return cell;
}

基于您上次修改的附加内容

更改

UIMenuItemCell *cell = [[UIMenuItemCell alloc] init];

UIMenuItemCell *cell = [[UIMenuItemCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier];