0

我是 iphone 新手。我有一个小小的疑问,我有一个 66 行的表格视图,最初我为所有行放置了一个进度视图,但在( )中viewdidload我将其设置为隐藏tableViewClassShowProgressViewCont

cell.progressView.hidden = YES;

这里(单元格)是 CustomCell 类的引用。在这个类中,我声明了一个进度视图,并且在这个类中也设置了 setter 和 getter 属性

在表格视图中,每个单元格中都有一个下载按钮。如果我们单击该下载按钮(例如在第 66 个单元格中)。我们必须仅删除该特定第 66 个单元格的进度视图的隐藏属性。其余 65 个单元格应该仅像所有单元格一样隐藏进度视图。

如果有人知道这一点,请帮助我....

4

5 回答 5

2

您熟悉表格单元格被重用的概念吗?

viewDidLoad 不是操作单个单元格内容的合适位置。如果表格太小以至于其所有单元格都适合屏幕(在两个方向上),它可能会正常工作。当表格中的单元格比屏幕上显示的单元格多时,那些最近变得不可见的单元格将被重新使用并再次显示。因此,如果屏幕上一次有 6 个单元格,则表格单元格编号。7(有时是 8)将与单元格编号相同。1.

cellForRowAtIndexPath 将是隐藏/取消隐藏单元格某些视图的更好位置。如果它已经是自定义单元格,那么单元格的 layoutSubViews 也可能是合适的。但是,只有在 tableViewController 的 cellForRowAtIndexPath 中,您才能轻松访问表的数据和关联的单元格。

每次单元格即将变为可见时,都会调用 cellForRowAtIndexPath。使用默认的重用机制来确保正确的单元对象将被重用。这非常简单。

于 2012-06-27T10:28:34.660 回答
0

首先在 CellForRowAtInedexPath 的下载按钮中设置行号

   downloadButton.tag = indexPath.row
   [downloadButton addTarget:self action:@selector(actionDownload:) forControlEvents:UIControlEventTouchUpInside];

在 actionDownload 中,从 button.tag 创建 IndexPath 并从 "cellForRowAtIndexPath:" 获取单元格,最后通过 reloadRowsAtIndexPaths: withRowAnimation: 更新

于 2012-06-27T10:01:27.667 回答
0

您的模型应该跟踪每个单击按钮的进度。出于此答案的目的,假设模型保存在名为 modelInformationArray 的属性中(该属性将包含与表中每个单元格相关的对象数组)

当单击单元格的下载按钮时,modelInformationArray 会被修改,使其对象知道正在为其处理下载。

该对象在名为 downloadProcessingStarted 的成员中报告下载处理。还有许多其他方法可以做到这一点。

要回答您的问题......然后取消隐藏进度视图,您将在 tableView:cellForRowAtIndexPath: 的 UITableViewDataSource 实现中执行以下操作。

- (UITableViewCell*)tableView:tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    YourCustomCell* cell = ...
    if ([[self.modelInformationArray objectAtIndex:indexPath.row] downloadingProcessingStarted])
        cell.progressView.hidden = NO;
}
于 2012-06-27T10:32:30.853 回答
0

获取索引 65 处的单元格,然后将其转换为您的自定义单元格

UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:64 inSection:0]];

YourCustomCell *customCell = (YourCustomCell *)cell;
customCell.progressView.hidden = NO;
于 2012-06-27T09:55:26.370 回答
0

在您的自定义单元格中隐藏您的进度视图意味着隐藏每个进度视图的默认属性,然后您的按钮单击方法。

CutomeCell *cell = (CutomeCell *)[[button superview] superview];
[cell.progressView setHidden:NO];
NSIndexPath *rowToReload = [[self tableView] indexPathForCell:cell];
NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil];
[UITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];

这可以帮助你...

于 2012-06-27T10:08:50.313 回答