在tableview外面的触摸上隐藏UITableView

时间:2014-03-05 10:20:03

标签: ios iphone uitableview uiview

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

可以看到 UITableView

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

3 个答案:

答案 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之前添加一个灰色/透明视图,然后在其上添加点击手势识别器以隐藏它。就是这样。

  1. 首先显示叠加视图 - alpha为0.5f,背景颜色应为浅色。

  2. 显示表格视图。

  3. 注意:叠加视图应具有水龙头识别器,这将隐藏叠加和桌面视图

    在视图中加载了

    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;
}

因此,在这种情况下,您可以在表视图实现中触及它所属的位置