iOS11 UISwipeActionPullView:UITabView左滑按钮文字字体样式等修改

iOS11,UITableViewCell左滑之后在cell的layoutSubViews中已经拿不到『UITableViewCellDeleteConfirmationView』,这时咱们可以通过以下方法来实现需求:

1、通过查看视图层级发现

UISwipeActionPullView

TableView中出了这个『UISwipeActionPullView』

2、在tableView的代理方法『willbeginEditing』中调用setNeedsLayout,使当前控制器的『viewWillLayoutSubviews』方法被调用(这一步必不可少,否则viewWillLayoutSubviews不会执行的)

setNeedsLayout

3、关键代码:

获取UISwipeActionPullView
1,2两种方式是OC中常用的class判断的方式,楼主在这里耽误了一点时间
经尝试后发现 :3,4两种方式可以完美的达到咱们的目的。

4、关键代码:

UISwipeActionPullView的视图层级

修改UISwipeActionStandardButton

5、修改完成:

修改完成!

6、iOS11以下的做法(可以在cell的layoutSubViews中,也可以在当前VC中,这里写的是第二种):

巧妙地在Indexpath初始化时,使row = -1 ,editIndexPath用来获取被编辑的cell

7、完整代码

完整代码

8、CodeClean

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        if editIndexPath.row < 0 { return }
        
        let cell = tableview.cellForRow(at: editIndexPath)
        let sup = UIDevice.current.systemVersion >= "11" ? tableview : cell!
        let swipeStr = UIDevice.current.systemVersion >= "11" ? "UISwipeActionPullView" : "UITableViewCellDeleteConfirmationView"
        let actionStr = UIDevice.current.systemVersion >= "11" ? "UISwipeActionStandardButton" : "_UITableViewCellActionButton"
        
        for subview in sup.subviews {
            if String(describing: subview).range(of: swipeStr) != nil {
                for sub in subview.subviews {
                    if String(describing: sub).range(of: actionStr) != nil {
                        if let button = sub as? UIButton {
                            button.backgroundColor = .black
                        }
                    }
                }
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容