【已解决】UISwitch 执行 setOn:animated:
2018-03-27 本文已影响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;
});