我有一个自定义单元格,我有一个图像视图,flag
。使用此方法,当我将光标移到图像上时,控件不会进入if
。我在其他类中使用此方法没有问题,但使用自定义单元格它不起作用。
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesMoved:touches withEvent:event];
UITouch *touch = [[event allTouches] anyObject];
if ([touch view] == flag) {
NSLog(@"flag"); // Does not enter here
}
// But here
}
答案 0 :(得分:1)
以下是可能会引导您回答的事情。如果你想要接受的触摸必须覆盖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,以便获取Cell我只是要求它的超级视图。