如何在tableView中为特定单元格设置隐藏属性为NO

时间:2012-06-27 09:49:40

标签: iphone ios

我是iphone的新手。我有一个小小的疑问,我有一个包含66行的表视图,最初我为所有行放置了一个进度视图,但是在viewdidload我将它设置为隐藏所有那些像在tableViewClassShowProgressViewCont

下方
cell.progressView.hidden = YES;

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

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

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

5 个答案:

答案 0 :(得分:2)

您是否熟悉重复使用表格单元格的概念?

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

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

每当单元格即将可见时,都会调用 cellForRowAtIndexPath。使用默认的重用机制来确保重用正确的单元对象。这非常直截了当。

答案 1 :(得分:0)

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

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

YourCustomCell *customCell = (YourCustomCell *)cell;
customCell.progressView.hidden = NO;

答案 2 :(得分:0)

首先在CellForRowAtInedexPath

中的下载按钮中设置行号
   downloadButton.tag = indexPath.row
   [downloadButton addTarget:self action:@selector(actionDownload:) forControlEvents:UIControlEventTouchUpInside];

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

答案 3 :(得分: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];

这对你有帮助......

答案 4 :(得分:0)

您的模型应该跟踪每个点击按钮的进度。为了这个答案的目的,让我们说模型保存在一个名为modelInformationArray的属性中(它将包含与表中每个单元格相关的对象数组)

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

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

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

- (UITableViewCell*)tableView:tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    YourCustomCell* cell = ...
    if ([[self.modelInformationArray objectAtIndex:indexPath.row] downloadingProcessingStarted])
        cell.progressView.hidden = NO;
}