隐藏桌面视图之外的触摸UITableView
我有一个小的UITableView ,当视图加载时隐藏。 当我点击“ 显示 ” UIButton时 , UITableView被myTableView.hidden=NO;
显示为可见myTableView.hidden=NO;
我想隐藏UITableView时,用户触及其框架之外。 谢谢你的帮助!
最好的方法
Simple.Before显示UITable视图添加一个灰显/透明视图,然后添加点击手势识别器,以隐藏它。 而已。
-
首先显示叠加视图 – 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 }
错误的方法
我们不应该在主视图上添加自来水识别器。 因为它里面可能有很多控件。 所以当用户点击它。 它将执行其操作。 所以为了避免它,我们可以通过上面的方法来模拟相同的行为
你可以通过这个获得触摸位置:
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; }
所以在这种情况下,你可以在表视图实现中捕捉它的逻辑上的属性。