在延迟加载tableview时更改属性?

时间:2013-01-07 14:36:23

标签: ios uitableview lazy-loading

上下文:我有自定义单元格的tableview。每个单元格都有一个下载资源的按钮。按下按钮时,应禁用tableview中的所有其他按钮。

所以我的问题是我无法获得对tableview上所有行的引用,因为它是延迟加载的。因此,当我尝试访问其他行时,它会失败,因为它没有在我开始禁用按钮时添加的对象。

以下是可能对我的问题更具启发性的代码:

NSMutableArray *cells = [NSMutableArray array];
for (NSInteger i = 0; i < [mainTableView numberOfRowsInSection:1]; ++i) {
    WSVideoLibraryTableCell *addedCell = (WSVideoLibraryTableCell *)[mainTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]];
    NSLog(@"CELL ADDED: %@", addedCell);
    [cells addObject:addedCell];
}
if (stateEnabled) {
    for (WSVideoLibraryTableCell *cell in cells) {
        [[cell downloadButton] setEnabled:YES];
    }
}
else
{
    for (WSVideoLibraryTableCell *cell in cells) {
        [[cell downloadButton] setEnabled:NO];
    }
}

我尝试添加一些仅包含可见单元格的代码。 NSArray *array = [mainTableView visibleCells]然后问题是,不可见的单元格将启用按钮,并且在可见的行中会出现奇怪的事情,它们会一次又一次地出现在tableView上(与延迟加载和改变他们?)

非常感谢您提出意见或建议!!

2 个答案:

答案 0 :(得分:0)

我的建议是让每个对象都有自己的isEnabled属性,以便您可以自己禁用对象,并根据该属性设置延迟加载的条件以禁用它们。

延迟加载非常有用,虽然对于一小部分单元格而言,您不会注意到资源消耗,但是当您增加正在处理的单元格数时,您将会这样做。

答案 1 :(得分:0)

最简单的方法(imo)是子类UITableViewCell,将字段添加到该对象(即按钮),保留所有这些对象的列表,然后让延迟渲染处理实际渲染。如果要禁用所有按钮,则不要进入渲染单元格,只需遍历对象列表,禁用每个按钮中的按钮。