0

我有 2 个部分,我正在尝试制作它,因此当您单击其中一个部分中单元格的复选框时,它会转到另一个部分(例如:第 1 部分->第 2 部分)

这是我的一些相关代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
    if (!cell)
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"];
    if([indexPath section] == 0){
    cell.textLabel.text = [[[taskArray objectAtIndex:[indexPath row]] taskName] uppercaseString];
    cell.imageView.image = [UIImage imageNamed:@"checkboxtry2.png"];
    } else if ([indexPath section] == 1) {
    cell.textLabel.text = [[[completedArray objectAtIndex:[indexPath row]] taskName] uppercaseString];
     cell.imageView.image = [UIImage imageNamed:@"checkboxtry2selected.png"];
    }

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handlechecking:)];
    [cell.imageView addGestureRecognizer:tap];
    cell.imageView.userInteractionEnabled = YES;
    return cell;
}


 -(void)handlechecking:(UITapGestureRecognizer *)t{
    CGPoint tapLocation = [t locationInView:self.tableView];
    NSIndexPath *tappedIndexPath = [self.tableView indexPathForRowAtPoint:tapLocation];
    NSIndexPath *newIndexPath = nil;
    if (tappedIndexPath.section == 0) {
        [completedArray addObject:[taskArray objectAtIndex:tappedIndexPath.row]];
        [taskArray removeObject:[taskArray objectAtIndex:tappedIndexPath.row]];
        newIndexPath = [NSIndexPath indexPathForRow:tappedIndexPath.row inSection:1];
    }
    else {
        [taskArray addObject:[completedArray objectAtIndex:tappedIndexPath.row]];
        [completedArray removeObject:[completedArray objectAtIndex:tappedIndexPath.row]];
        newIndexPath = [NSIndexPath indexPathForRow:tappedIndexPath.row inSection:0];
    }
    [self.tableView beginUpdates];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:tappedIndexPath] withRowAnimation:UITableViewRowAnimationNone];
    [self.tableView endUpdates];

}

我有两个数组:处理第 0 节中的对象的 taskArray 和处理第 1 节中的对象的 completedArray。

我收到错误* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array”

4

1 回答 1

1

2 件事。

  • 即使手势识别器已被重复使用并且已经有一个,您也正在重复地将手势识别器添加到您的表格视图单元格中。

同样在您的手势识别器目标中,您可以执行以下操作,这可能更可靠:

UITableViewCell *cell = [[t.view superview] superview];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
于 2013-07-04T17:08:25.570 回答