-1

在我的 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;
}
4

1 回答 1

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];
于 2012-06-18T10:04:25.630 回答