0

上下文:我有一个带有自定义单元格的表格视图。每个单元格都有一个下载资源的按钮。按下按钮时,应禁用 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 上(与延迟加载和更改它们有关吗?)

非常感谢您的意见或建议!!

4

2 回答 2

0

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

延迟加载非常有用,虽然对于少量的单元格,您不会注意到资源消耗,但随着您正在处理的单元格数量的增加,您会注意到。

于 2013-01-07T14:41:06.207 回答
0

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

于 2013-01-07T14:41:42.150 回答