我有一个小的 UITableView ,在加载视图时会隐藏。当我点击“显示” UIButton 时,myTableView.hidden=NO;
当用户触摸其框架外时,我想要隐藏 UITableView 。谢谢你的帮助!
答案 0 :(得分:1)
你可以通过这个获得触摸位置:
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)];
[self.view addGestureRecognizer:singleTap];
- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture
{
CGPoint touchPoint=[gesture locationInView:self.View];
}
然后检查该点是否在tableview框架中。如果没有,则隐藏tableview
。希望这有帮助。 :)
答案 1 :(得分:1)
最佳方法
简单。在显示UITable View之前添加一个灰色/透明视图,然后在其上添加点击手势识别器以隐藏它。就是这样。
首先显示叠加视图 - alpha为0.5f,背景颜色应为浅色。
显示表格视图。
注意:叠加视图应具有水龙头识别器,这将隐藏叠加和桌面视图
在视图中加载了UITapGestureRecognizer *tapRecog = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(overlayDidTap:)];
[myOverLayView addGestureRecognizer:tapRecog];
- (void)overlayDidTap:(UITapGestureRecognizer *)gesture
{
//hide both overlay and table view here
}
不良方法
我们不应在主视图本身上添加点按识别器。因为它可能有很多 它内部的控制。所以当用户点击它时。它将执行其操作。所以要避免 我们可以通过上述方法模拟相同的行为
答案 2 :(得分:0)
子类UITableView
,覆盖pointInside:withEvent:
。出于这个原因,这是模板化的。
类似的东西:
-(BOOL)pointInside:(CGPoint) point withEvent:(UIEvent*) event
{
BOOL pointIsInsideTableView = [super pointInside:point withEvent:event];
BOOL pointIsOutsideTableView = // Some test
return pointIsInsideTableView || pointIsOutsideTableView;
}
因此,在这种情况下,您可以在表视图实现中触及它所属的位置。