zoukankan      html  css  js  c++  java
  • 在VC上加一个tableview,为什么touchesBegan方法没有触发

    pointInside(),查找是从UIWindow开始,先判断是否点击点是否在自己的bounds内,如果是,往下遍历;hitTest(),最终返回的view,是逆向的,如果能响应点击,就把自己返回。

    为什么没有响应点击
    在VC上加一个tableview,为啥touchesBegan()没有触发?
    tableview继承scrollview,scrollview默认取消touch的传递,所以父视图就不会响应touch了。

    为什么VC的view上加了其他子视图,当点击子视图时,VC中的touchesBegan()被调用了?
    答:因为子视图没有重写这个方法touchesBegan(),请参考下面的问题;

    为什么uiview,重写了touchesBegan(),VC的touchesBegan()就不响应了?
    答:子视图响应了touch,那么父视图touch就不会响应了。

    TableView为什么不响应touchBegan

    回到刚开始的问题,当我们点击TableView时,为什么touchBegan不响应呢?通过响应链我们不难想象到,当我们点击屏幕时,第一响应者应该是UITableView,而我们调用的touchBegan其实是ViewController的View的方法,所以无法被调用。
    解决方法也很简单,我们可以给tableView写一个基类,重写tableview的touchBegan方法,通过block或者代理传出,然后继承基类,即可实现touchBegan的响应。


    不过对于滚动视图的键盘回收,感觉还是`tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag`这样比较优雅,毕竟是系统提供的。 


    作者:WhisperKarl
    链接:https://www.jianshu.com/p/d77164f8cac5
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    python基础语法
    头文件和库文件
    #pragma的用法
    C++ signal的使用
    Glog
    Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量
    /etc/ld.so.conf详解
    拿与不拿的dfs
    空白字符读取和处理
    统计频率----初始条件的设置
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/10288890.html
Copyright © 2011-2022 走看看