美文网首页
UIScrollView delaysContentTouche

UIScrollView delaysContentTouche

作者: 杨柳小易 | 来源:发表于2017-07-13 14:56 被阅读50次

    半年不动的代码产品说有问题,原因是 UISlider 滑动不灵敏,要手指先触摸一下,按上去才能滑动。场景是 <code>UISlider</code> 添加在了<code>UITableViewCell</code> 上。

    因为项目中是继承了 <code>UISlider</code> ,所以,很简单的解决方案,在项目中,把UISlider 从新生成一个,放在一个什么事件都不处理的 <code>UIView</code> 上。看看效果。结果很流畅。所以问题肯定出在<code>UITableView</code> 或者 <code>UITableViewCell</code> 上。

    查看UITableView 以及 UIScrollView 的文档。

    @property(nonatomic) BOOL delaysContentTouches;       // default is YES. if NO, we immediately call -touchesShouldBegin:withEvent:inContentView:. this has no effect on presses
    
    

    发现 delaysContentTouches 属性。默认为YES, 如果设置为NO ,会立即响应 touchesShouldBegin 方法。。。

    解决方案

    _tableView.delaysContentTouches = NO;
            [_tableView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                if ([obj isKindOfClass:[UIScrollView class]]) {
                    UIScrollView *_s = (UIScrollView *)obj;
                    _s.delaysContentTouches = NO;
                }
            }];
    
    
    

    关闭掉<code>tableview</code> 所有的 <code>delaysContentTouches</code> 方法。

    后来测试说,在iOS7上还是不灵敏。。嗯哼?经过测试iOS7 UITableViewCell 上的scrollView 也会开启,所以在创建cell 的时候,用同样的手段,,

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
            [self setup];
            ///#FIX iOS7 滑动不灵敏
            for (UIView *view in self.subviews) {
                if([view isKindOfClass:[UIScrollView class]]) {
                    ((UIScrollView *)view).delaysContentTouches = NO;
                    break;
                }
            }
        }
        return self;
    }
    
    

    OK 万事大吉。。。

    相关文章

      网友评论

          本文标题:UIScrollView delaysContentTouche

          本文链接:https://www.haomeiwen.com/subject/psiwhxtx.html