美文网首页成长笔记
【已解决】UISwitch 执行 setOn:animated:

【已解决】UISwitch 执行 setOn:animated:

作者: 君赏 | 来源:发表于2018-03-27 10:01 被阅读89次

typora-copy-images-to: ipic

【已解决】UISwitch 执行 setOn:animated:没有任何的效果和动画

问题描述

  • 预览图

    513A073C-ED37-4C85-8BDB-92513B72E581

    上图中有三个自带原生的 UISwitch 控件,我们手动切换是有效果的。为了扩大点击范围,当点击整行 Cell 的时候自动执行动画效果。

    • 效果图
    2018-03-27 08_55_10

    下面是代码实现

    /* 此处的代码是封装的表格框架 目的就是代替系统点击 CELL 的回调 */
    [tableViewCell setDidSelectRowCompletionHandle:^(SOACheckOutDropShipTableViewCell *cell, NSIndexPath *indexPath) {
        [cell switchDropShip];
    }];
    
    /* 执行 UISwitch 切换 */
    - (void)switchDropShip {
        [self.dropShipSwich setOn:!self.dropShipSwich.on animated:YES];
    }
    
    • 难道是 UISwitch 分类的影响?

      B9D037B3-FB3B-4C1A-A736-037C0A3507C3

      整个工程文件搜索只有自己写的一个分类还是为了延时0.25秒动画完成再执行动作回调,不影响。

  • 添加在 Window 上面会不会执行动画呢?

    2018-03-27 09_22_35

    表现的十分的正常

  • 难道是添加在 UITableViewCell 上面的影响?

    我们新建一个 Example 查看一下。

    2018-03-27 09_32_14

    切换的如此丝滑 看来也不是添加在 UITableViewCell上面的影响。

解决办法

这个问题出现的原因是我的界面使用我封装的表格管理器

https://github.com/josercc/ZHTableViewGroup

导致的。

因为在点击 cell 时候我要返回点击 cell 的对应的对象和索引

我就走我当时创建 Cell 的方法用 UITableView 的dequeueReusableCellWithIdentifier方法获取。

这个方法返回的对象和界面显示的不是一个动画,在界面的对象还没有动画执行完毕,最新的已经替换,导致功能失效。

https://github.com/josercc/ZHTableViewGroup最新版本已经修复了这个问题。

我暂时的认为点击 cell 只能点击出现的 cell,我就从visibleCells这个数组获取,找到点击的 cell 之后直接返回。

就不会存在对象地址变更导致这个问题出现了。

__block UITableViewCell *cell = ({
    cell = nil;
    /* 因为点击的 CELL 一定是在屏幕可见的范围之内 所以直接取 */
    [dataSource.tableView.visibleCells enumerateObjectsUsingBlock:^(__kindof UITableViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSIndexPath *visibleIndexPath = [dataSource.tableView indexPathForCell:obj];
        if ([indexPath compare:visibleIndexPath] == NSOrderedSame) {
            cell = obj;
        }
    }];
    cell;
});

相关文章

网友评论

    本文标题:【已解决】UISwitch 执行 setOn:animated:

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