0
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.userInteractionEnabled = NO;
}

我使用上面的代码在用户单击一次单元格后禁用它。我遇到的问题是,当一个单元格添加到表中时,该新单元格被禁用,并且之前禁用的单元格不再存在。

我该如何解决这个问题?

4

3 回答 3

0

dequeueReusableCellWithIdentifier在你的使用cellForRowAtIndexPath吗?

你应该有这样的东西:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *reuseIdentifier = @"myTableViewCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
if (!cell) {
      cell = [[ArticleTableViewCell alloc] init];
}
// customise cell here (like cell.title = @"Woopee";)
if (self.selectedCells containsObject:[NSString stringWithFormat:@"%d", indexPath.row]] {
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.userInteractionEnabled = NO;
}
return cell;
}

扩展另一个答案,您可以通过对上述内容执行以下操作来跟踪是否先前选择了特定单元格(因此应该禁用):

像这样声明一个属性@property (nonatomic, strong) NSMutableArray *selectedCells;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
    [self.selectedCells addObject:[NSString stringWithFormat:@"%d", indexPath.row]];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.userInteractionEnabled = NO;
}

我的笔记本电脑快要死了,但如果它崩溃了,你应该查看初始化单元格(alloc 和 init)的代码,或者保留之前的代码。

于 2013-09-25T02:51:45.673 回答
0

您需要记录哪些单元格已被禁用。您可以将所选单元格的 indexPath 存储在一个数组中,然后使用它来确定哪些单元格应该在您的 cell:forRowAtIndexPath: 方法中处于活动状态和不活动状态。

于 2013-09-25T08:57:41.423 回答
0

当用户滚动表格时,单元格会被重用。您需要跟踪用户禁用了哪些行,因此cellForRowAtIndexPath您可以在userInteractionEnabled每次请求时为每个单元格设置属性(根据需要设置为“是”或“否”)。

更新 - 更多细节。

您需要跟踪用户选择了哪些索引路径。添加一个类型的实例变量NSMutableSet并将每个变量添加indexPath到您的didSelectRow...方法中。

然后在您的cellForRow...方法中,您需要检查电流indexPath是否在集合中。根据您设置单元格userInteractionEnabled属性的结果:

cell.userInteractionEnabled = ![theSelectedPathsSet containsObject:indexPath];

theSeletedPathsSet你的NSMutableSet实例变量在哪里。

此解决方案假定表中的行和部分是固定的。如果用户可以执行导致添加、删除或移动行的操作,那么您不能简单地跟踪索引路径。您需要使用其他键来了解已选择了哪些行。

于 2013-09-25T02:39:58.017 回答