zoukankan      html  css  js  c++  java
  • UIView加入手势 然后UITableView 加入进这个View 导致UITableView 的单元格点击事件无效

    #import "ViewController.h"
    
    @interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UIGestureRecognizerDelegate>
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        UIView * v = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 280, 100)];
        v.backgroundColor = [UIColor redColor];
        [self.view addSubview:v];
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewClick:)];
        tap.delegate  = self;
        [v addGestureRecognizer:tap];
        
        UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 280, 100)];
        tableView.delegate = self;
        tableView.dataSource = self;
        
        [v addSubview:tableView];
    }
    -(void) viewClick:(UITapGestureRecognizer*) tap
    {
        NSLog(@"点击view");
    }
    
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        return 1;
    }
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return 1;
    }
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell * cell = [UITableViewCell new];
        cell.textLabel.text = @"測试";
        return cell;
    }
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSLog(@"点击单元格");
    }
    
    
    #pragma mark - UIGestureRecognizerDelegate
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
            return NO;
        }
        return  YES;
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end

    解决方式是 加入手势的代理 重写- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 函数

    下面是代码



  • 相关阅读:
    Java 异常处理机制和集合框架
    如何在Windows 下安装Python
    公司为啥要上市?上市对公司有什么好处?
    MongoDB Driver:使用正确的姿势连接复制集
    mongodb复制集开启安全认证
    关于 MongoDB 复制集
    如何高效的使用 Git
    Linux shell常用命令
    MongoDB 查看所有用户账号信息
    MongoDB开启安全认证
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6927077.html
Copyright © 2011-2022 走看看