隐藏桌面视图之外的触摸UITableView

我有一个小的UITableView ,当视图加载时隐藏。 当我点击“ 显示UIButton时UITableViewmyTableView.hidden=NO;显示为可见myTableView.hidden=NO;

我想隐藏UITableView时,用户触及其框架之外。 谢谢你的帮助!

最好的方法

Simple.Before显示UITable视图添加一个灰显/透明视图,然后添加点击手势识别器,以隐藏它。 而已。

  1. 首先显示叠加视图 – alpha将为0.5f,背景色应为透明色。

  2. 显示表格视图。

注:俯视图应该有轻拍识别器,这将隐藏覆盖和表视图

视图中加载

 UITapGestureRecognizer *tapRecog = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(overlayDidTap:)]; [myOverLayView addGestureRecognizer:tapRecog]; - (void)overlayDidTap:(UITapGestureRecognizer *)gesture { //hide both overlay and table view here } 

错误的方法

我们不应该在主视图上添加自来水识别器。 因为它里面可能有很多控件。 所以当用户点击它。 它将执行其操作。 所以为了避免它,我们可以通过上面的方法来模拟相同的行为

你可以通过这个获得触摸位置:

 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 。 希望这个帮助。 🙂

子类UITableView ,覆盖pointInside:withEvent: 这是由于这个原因的模板。

就像是:

 -(BOOL)pointInside:(CGPoint) point withEvent:(UIEvent*) event { BOOL pointIsInsideTableView = [super pointInside:point withEvent:event]; BOOL pointIsOutsideTableView = // Some test return pointIsInsideTableView || pointIsOutsideTableView; } 

所以在这种情况下,你可以在表视图实现中捕捉它的逻辑上的属性。