如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?
Posted
技术标签:
【中文标题】如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?【英文标题】:how to get touchesMoved for UIImageView within a cell of UITableView? 【发布时间】:2014-02-26 15:58:07 【问题描述】:我需要在 UITableView 的单元格中为 UIImageView 获取 touchesBegan 和 touchesMoved。 但是,如果我在单元格中触摸 UIImageView,则 touchesBegan 和 touchesMoved 不会触发。 如果我触摸了 UITableView 之外的任何其他 UIImageView,则 touchesBegan 和 touchesMoved 工作。
这里是从 viewDidLayoutSubviews() 调用的 UITableView 的分配...... tableFrame = CGRectMake(y-42, x+10 + DEVICE_TABLE_BORDER_WIDTH, height, width);
device_off_tableView = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain];
device_off_tableView.rowHeight = device_off_row_height;
device_off_tableView.sectionFooterHeight = 0;
device_off_tableView.sectionHeaderHeight = 0;
device_off_tableView.scrollEnabled = YES;
device_off_tableView.bounces = YES;
device_off_tableView.delegate = self;
device_off_tableView.dataSource = self;
device_off_tableView.allowsSelection = NO;
device_off_tableView.tag = channel;
device_off_tableView.transform = CGAffineTransformMakeRotation(-M_PI/2);
device_off_tableView.autoresizesSubviews = NO;
// Add device_off_tableView to the view:
device_off_tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
off_record_index = expected_off_index = 0;
[device_off_tableView reloadData];
[[self view] addSubview: device_off_tableView];
这里是单元格内 UIButton 的分配.......................
// Put invisible UIButton on top of device icon, to detect start of drag: !!!
UIButton* invisible_drag_button = [UIButton buttonWithType:UIButtonTypeCustom];
invisible_drag_button.frame = CGRectMake (x,y, w,h); // location and size of device off icon
invisible_drag_button.tag = cell_record_index; // store user device's record index
[invisible_drag_button addTarget: self
action:@selector( delegate_drag_start: )
forControlEvents: UIControlEventTouchDown ];
[cell.contentView addSubview: invisible_drag_button ];
这里是触摸代理:..................................
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
printf("touchesBegan \n");
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
// Get touch event's details:
UITouch *touch = [[event allTouches] anyObject];
// Touching image to be dragged?
if([touch view] == self.device_drag_UIImageView)
printf("touchesMoved device_drag_UIImageView \n");
CGPoint location = [touch locationInView: self.view];
self.device_drag_UIImageView.center=location;
else
printf("touchesMoved WRONG IMAGE \n");
【问题讨论】:
我相信你必须通过触摸事件。 为什么不直接使用附加到图像视图的手势识别器? 手势识别器是否适用于从单元格的 UIImageView 拖动到其 UITableView 之外的外部?并且在拖动时,我需要动态显示拖动的 uiImageView 超出 UITableView。 【参考方案1】:假设您在单元格类中有touchesMoved:withEvent:
,这应该可以工作。
在您的 UITableViewController 上尝试以下操作
self.tableView.canCancelContentTouches = NO;
self.tableView.delaysContentTouches = NO;
【讨论】:
那行不通。它禁用了表格滚动。【参考方案2】:图像视图将userInteractionEnabled
设置为NO
。这意味着您不会获得触摸事件。将其设置为YES
,它可能会解决您的问题。然而,更好的方法是使用UIPanGestureRecognizer
。您仍然需要将userInteractionEnabled
设置为YES
,但它更适用于tableview
【讨论】:
以上是关于如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 UITableView 在动态高度单元格中滚动到底部?
如何在 UITableview 单元格中正确显示 JSON 数据?
如何在 Xcode swift 的 UITableview 单元格中显示当前股票价格?