2

我有一个子类 custom UITableViewCell,我在其中插入了一个进度视图。

方法如下:

-(void)layoutSubviews {
    applicationDelegate = [[UIApplication sharedApplication] delegate];
    [super layoutSubviews];
    self.imageView.frame = CGRectMake(0, 0, self.frame.size.height, self.frame.size.height);

        self.textLabel.frame = CGRectMake( self.imageView.frame.size.width + 20, self.textLabel.frame.origin.y, self.textLabel.frame.size.width, self.textLabel.frame.size.height);
        progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
        progressView.frame = CGRectMake(self.textLabel.frame.origin.x, 50, 150, 100);
        progressView.progress = 0.0f;
        progressView.trackTintColor = [UIColor clearColor];
        progressView.progressTintColor = [UIColor redColor];
        progressView.tag = 101;
        [progressView setHidden:YES];
        [self.contentView addSubview:progressView];
}

现在,当在其他视图控制器中我只想在第一个单元格中显示这些元素时,我试图将这些元素隐藏在其他单元格中。这是我尝试在方法中执行此操作的cellForRowAtIndexPath:方法:

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

    static NSString * cellIdentifier = @"cellId";

    CustomCell * cell = [self.tableview dequeueReusableHeaderFooterViewWithIdentifier:cellIdentifier];

    if (cell == Nil) {

        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

if (indexPath.row == 0) {

            imageData = UIImageJPEGRepresentation(cell.imageView.image, 100);
            filename = cell.textLabel.text;

            [(UIProgressView*)[cell.contentView viewWithTag:101] setHidden:NO];<==Not Working
}

    return cell;
}

如何在我的 ViewController 的自定义 UITableView 子类中使用这个 UIElements?我没有使用 xib 文件,一切都是以编程方式完成的。我已经在这附近玩了一整天了,有人知道吗?

4

1 回答 1

0

如果只有第一行需要显示进度视图,为什么不只对行使用自定义单元格0,然后UITableViewCell对行使用标准>1

我还建议在方法中添加progressViewto而不是在. 旨在定位您已经拥有的视图(而不是添加新视图),因为它可以在单元格的生命周期内多次调用。self.contentViewinitlayoutSubviewslayoutSubviews


我会在自定义单元格中添加一个 BOOL 属性,以确定是否应该显示进度指示器(并在设置为 NO 时将其删除)。在 cellForRowAtIndexPath: 中,您可以为给定的行适当地设置它。

CustomCell.h

@property(nonatomic, assign) BOOL shouldShowProgressView;

CustomCell.m

- (void)setShouldShowProgressView:shouldShowProgressView {
     _shouldShowProgressView = shouldShowProgressView;

     if (shouldShowProgressView) {
           if (self.someProgressView == nil) {
                // add your progress view from scratch
           }

           [self.contentView addSubview:self.someProgressView];

     } else {
           [self.someProgressView removeFromSuperview];
     }
}

在您的表控制器中:

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    static NSString *cellIdentifier = @"cellId";
    CustomCell *cell = [self.tableview dequeueReusableHeaderFooterViewWithIdentifier:cellIdentifier];

    if (cell == Nil) {
        cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    if (indexPath.row == 0) {
         cell.shouldShowProgressView = YES;

    } else {
         cell.shouldShowProgressView = NO;
    }

    return cell;
}
于 2013-04-19T12:50:14.950 回答