Swift自定义TableView左滑删除按钮样式


Swift自定义TableView左滑删除按钮样式

1. 效果图

1111.png

2. 实现过程

在tableView的layoutSubview中遍历,然后可以自定义一个按钮添加上去

override func layoutSubviews() {
    super.layoutSubviews()
    
    if #available(iOS 11.0, *) {
        for subview in self.subviews where subview.isKind(of: NSClassFromString("UISwipeActionPullView")!) {
            subview.backgroundColor = Main_RedColor
            
            for view in subview.subviews where view.isKind(of: NSClassFromString("UISwipeActionStandardButton")!) {
                
                view.backgroundColor = Main_RedColor

                let deleteBtn = setupDeleteBtn(frame: CGRect(x: 0, y: 0, width: autoWidth(width: 160), height: view.height))
                view.addSubview(deleteBtn)
                view.bringSubview(toFront: deleteBtn)
            }
        }
        
    } else {    // IOS 10以及以下
        for subview in subviews where subview.isKind(of: NSClassFromString("UITableViewCellDeleteConfirmationView")!) {
            subview.backgroundColor = Main_RedColor
            
            for view in subview.subviews where view.isKind(of: UIButton.self) {
                view.backgroundColor = Main_RedColor
                
                let deleteBtn = setupDeleteBtn(frame: view.frame)
                view.addSubview(deleteBtn)
                view.bringSubview(toFront: deleteBtn)
            }
        }
    }
}


private func setupDeleteBtn(frame: CGRect) -> UIButton {
    
    let deleteBtn = UIButton(type: .custom)
    deleteBtn.frame = frame
    deleteBtn.backgroundColor = Main_RedColor
    deleteBtn.setTitle("删除", for: .normal)
    deleteBtn.setTitleColor(UIColor.white, for: .normal)
    deleteBtn.titleLabel?.font = UIFont.systemFont(ofSize: autoFont(size: 32))
    deleteBtn.setImage(UIImage(named: "delete"), for: .normal)
    deleteBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, autoWidth(width: 16))
    return deleteBtn
}

3. 左滑功能

//MARK:- 左滑删除
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
    return true
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .delete
}

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    deleteItemByModel(chapter: chapterModels?[indexPath.row])
 
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容