Вот кое-что, что может привести вас к ответу. Если вы хотите, чтобы касания были сняты, необходимо переопределить UITableView или UITableViewCell. Переопределив прикосновения в вашем UITableViewCell, вы сможете оценить, какое представление было затронуто, как вы делаете в данный момент. Обратите внимание, что если вы коснетесь представления содержимого и переместитесь по представлению изображения, к которому вы прикасаетесь (и, следовательно, возвращены набором касаний), все равно будет представление содержимого. Если коснуться UIImageView, вы получите это представление вернулось и приведет к тому, что ваш NSLog будет записан.
Как дополнительный пункт, который вы должны установить,
[self.flag setUserInteractionEnabled:YES];
или вы можете установить флажок взаимодействия в инспекторе атрибутов. Чтобы убедиться, что сенсорные события запускаются. Я не уверен, что это точно отвечает на ваш вопрос, но я надеюсь, что это поможет.
Вот проблема, которая у меня была, и надеюсь, это поможет. Моя проблема заключалась в том, что у меня был UIView, в котором был UITableView и несколько других меньших UIViews. Я хотел иметь возможность перетаскивать меньшие виды и помещать их в ячейки таблицы, устанавливая изображение UITableViewCell в соответствии с CALayer для меньшего вида, которого коснулись. Вот сенсорный код, который я использовал.
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *t =[touches anyObject];
UIGraphicsBeginImageContext(t.view.bounds.size);
[t.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
self.draggedView = [[UIImageView alloc] initWithImage:img];
CGPoint centre = [[touches anyObject] locationInView:self.view];
[self.draggedView setCenter:centre];
[self.draggedView setAlpha:0.5];
[self.view addSubview:self.draggedView];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint centre = [[touches anyObject] locationInView:self.view];
[self.draggedView setCenter:centre];
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint centre = [[touches anyObject] locationInView:self.view];
UIView *hit = [self.tableView hitTest:centre withEvent:event];
UIGraphicsBeginImageContext(self.draggedView.bounds.size);
[self.draggedView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if(hit!=nil){
UITableViewCell *tvc = (UITableViewCell *)hit.superview;
[tvc.imageView setImage:img];
UITableView *tv = (UITableView *)tvc.superview;
NSIndexPath *ip = [tv indexPathForCell:tvc];
[tv deselectRowAtIndexPath:ip animated:YES];
}
[self.draggedView removeFromSuperview];
self.draggedView = nil;
}
Тест попадания в touchesEnded возвращает UITableViewCellContentView, так что для получения ячейки, я просто запрашиваю ее суперпредставление.