我有一个UITableViewController
,tableView
的视图为backgroundView
(更多,它是MKMapView
),设置为
self.tableView.backgroundView = _mapView;
目前,屏幕上显示背景视图(我还有一个透明的表头来实现这一点)。我无法让mapView
(tableView
'backgroundView
)回复用户互动。我的表头,在地图视图上方,是UIView的子类,具有以下覆盖:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
LogDebug(@"Clic en transparent view");
if (_transparent)
{
return nil;
}
return [super hitTest:point withEvent:event];
}
所以它应该通过事件;我不知道什么是错的,并且在其他类似的问题中找不到任何解决方案。
我必须将mapView保留为tableView的背景属性,所以请考虑到这一点。
有什么想法吗?
答案 0 :(得分:2)
tableView.backgroundView
。相反,我使tableView.backgroundColor
透明,然后在表视图下放置另一个视图。
编辑:
在"桌下"我的意思是tableView
和anotherView
是同一父视图的子项,tableView.zPosition
大于anotherView.zPosition
。
然后我所做的就是覆盖tableView
:
(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
让tableView
避免保留不在其单元格中的事件。
以下是代码:
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
/// the height of the table itself.
float height = self.bounds.size.height + self.contentOffset.y;
/// the bounds of the table.
/// it's strange that the origin of the table view is actually the top-left of the table.
CGRect tableBounds = CGRectMake(0, 0, self.bounds.size.width, height);
return CGRectContainsPoint(tableBounds, point);
}
它对我来说就像一个魅力。希望它能帮助遇到这个问题的任何其他人。
答案 1 :(得分:0)
我猜测touchEvents无法传递给tableView的backgroundView。 所以,我做的是,
对于作为UIVIEW的子类的headerView,我添加了一个类属性作为mapView。 在 HeaderView.h
中@property (nonatomic,assign) UIView *mapView;
并且,在 tableViewController
中-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
HeaderView *view =[[TestView alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
view.mapView =tableView.backgroundView;
return view;
}
并在HeaderView中覆盖hitTest并返回此mapView。
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
return self.mapView;
}
现在mapView接收到touchEvent并相应地做出响应。
。添加您可能感兴趣的额外代码。
希望这会有所帮助。
答案 2 :(得分:0)
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
if(point.y > self.frame.size.height){
return nil;
}
return [self.mapView hitTest:point withEvent:event];
}
答案 3 :(得分:0)
将它放在UITableView子类中,缺点是你不能再点击单元格,但希望它是一个指向正确方向的指针。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{}
答案 4 :(得分:0)
仅供参考,这是一篇旧文章,并且UITableView.backgroundView现在确实得到了润色。因此,如果您的backgroundView中的内容没有收到触摸,则是由于其他一些问题。