Есть ли какой-нибудь правильный способ определить номер раздела в таблице из CGPoint, если раздел пустой? - PullRequest
1 голос
/ 06 марта 2012

Я использую режим перетаскивания для добавления новых элементов в 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

, все прекрасно работает.Но когда я наведу курсор на пустой заголовок раздела, я получу предыдущий номер раздела.Этот подход не работает.Поэтому я пытался перехватить событие из CGRectContainsPoint в headerView, но у меня ничего не получилось, потому что я не могу получить номер раздела из текущего представления.Я пытался установить теги в соответствии с разделом

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 голосов
/ 28 января 2015

Это может быть решением. Это работает для меня. Вы должны выполнить итерацию для каждого "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++;
}
0 голосов
/ 17 мая 2014

Используйте следующий код, он даст вам путь к индексу, как, например, ваш тривинг, когда вы выбрали 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];
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...