如果该部分为空,有没有正确的方法来确定CGPoint表中的节号?

时间:2012-03-06 07:44:29

标签: iphone objective-c ios xcode ipad

我正在使用拖放操作在tableView中添加新元素。当我使用

    [tableView indexPathForRowAtPoint:CGPointMake(point.x-tableView.frame.origin.x, point.y-tableView.frame.origin.y+tableView.contentOffset.y)].section // point is an CGPoint instance
一切都很好。但是当我将空白部分标题视图下方悬停点时,我会得到上一个部分编号。这种方法不起作用。所以我试图在headerView中从CGRectContainsPoint捕获事件,但我没有成功,因为我无法从当前视图中获取节号。我试图根据

部分设置标签
if (CGRectContainsPoint(CGRectMake([tableView viewWithTag:i+1].frame.origin.x + tableView.frame.origin.x, [tableView viewWithTag:i+1].frame.origin.y, tableView.frame.size.width, tableView.frame.size.height), CGPointMake(point.x, point.y + tableView.contentOffset.y))) {
            [tableView viewWithTag:i+1].backgroundColor = [UIColor redColor];
        }

但是这种方法具有疯狂的行为,与实际位置无关。我觉得自己很沮丧,我会感谢你的帮助。

顺便说一句:我知道,如果我在空栏中添加虚拟单元格,那么问题就会消失,但由于相关问题,我不能这样做。抱歉英语不好;)

2 个答案:

答案 0 :(得分:0)

使用以下代码,它将为您提供索引路径,就像您选择tableviewcell时的行为方式一样。

 -(UITableViewCell *)cellForReuseIdentiFier:(NSString*)identifier andindex:(NSIndexPath*)indexPath
 {
      UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
     cell.backgroundColor = [UIColor clearColor];
     cell.selectionStyle = UITableViewCellSelectionStyleNone;

     UIButton *circleBtn = [UIButton buttonWithType:UIButtonTypeCustom];
     [circleBtn addTarget:self action:@selector(selectSongAction:) forControlEvents:UIControlEventTouchUpInside];
     [circleBtn setTag:Selection_Tag];
     [circleBtn setBackgroundImage:[UIImage imageNamed:@"Demo03.png"] forState:UIControlStateNormal];
     [circleBtn setFrame:CGRectMake(6, 15, 16, 16)];
     [cell.contentView addSubview:circleBtn];

     return cell;
  } 
 -(void)selectSongAction:(id)sender
 {
     CGPoint btnPostion = [sender convertPoint:CGPointZero toView:songTable];
     NSIndexPath *indexPath = [songTable indexPathForRowAtPoint:btnPostion];
  }

答案 1 :(得分:0)

这可能是一个解决方案。它为我工作。你必须遍历每个" rectForHeaderInSection:"查看该位置是否指向其中一个部分。如果其中一个包含CGPoint,则获取它并将您的行移动到指向的部分。

CGPoint location = [longPress locationInView:self.orderTableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];

int i = 0;
while (i < self.datasource.count) {
    CGRect rect = [self.tableView rectForHeaderInSection:i];
    if (CGRectContainsPoint(rect, location)) {
        indexPath = [NSIndexPath indexPathForRow:indexPath.row inSection:i];
        break;
    }
    i++;
}