uitableview中的复选框出错

时间:2013-07-04 17:02:04

标签: iphone ios objective-c uitableview

我有两个部分,我试图这样做,当你点击其中一个部分的单元格的复选框时,它会转到另一部分(例如:第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];

}

我有两个数组:taskArray处理第0节中的对象,completeArray处理第1部分中的对象。

我收到错误 *由于未捕获的异常'终止应用'NSRangeException',原因:'* - [__ NSArrayM objectAtIndex:]:索引0超出空数组的边界'

1 个答案:

答案 0 :(得分:1)

2件事。

  • 您正在向表格视图单元格重复添加手势识别器,即使它们已被重复使用并且已经有一个。

同样在你的手势识别器目标中,你可以做一些可能更可靠的事情:

UITableViewCell *cell = [[t.view superview] superview];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];