首页 > 其他分享 >swift使用SwipeableCell

swift使用SwipeableCell

时间:2022-12-30 13:44:53浏览次数:36  
标签:tableView self SwipeableCell cell let 使用 table swift frame

被一个小画面吸引,觉得写的也挺齐全的,就想整理出来。

可滑动菜单, 实现左右滑动动作,菜单操作按钮。

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIActionSheetDelegate {

    private let cellHeight:CGFloat = 66//声明并定义行高
    private let colorRatio:CGFloat = 10//声明并定义渐变色,渐变程度
    private var actionController:UIAlertController!//声明弹窗
    var table:UITableView!
    
    //定义tableView中内容
    private let lyric = "when i was young i'd listen to the radio,waiting for my favorite songs,when they played i'd sing along,it make me smile,those were such happy times and not so long ago,how i wondered where they'd gone,but they're back again just like a long lost friend,all the songs i love so well,every shalala every wo'wo,still shines,every shing-a-ling-a-ling"
    private var dataSource:Array<String>!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        table = UITableView(frame: self.view.frame)
        self.view.addSubview(table)
        table.delegate = self
        table.dataSource = self
        table.separatorStyle = .none
        
        //设定数据源
        self.dataSource = lyric.split(separator: ",").map(String.init)
//        self.dataSource = lyric.characters.split(separator: ",").map(String.init)
        
        //定义弹窗
        actionController = UIAlertController(title: "", message: "", preferredStyle: .alert)
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
//        key1: reload Data here
        table.reloadData()
        
//        key2: do the animation in ViewwillApear,not in delegate "willDisplay", that will case reuse cell problem!
        let cells = table.visibleCells
        let tableHeight: CGFloat = table.bounds.size.height
        
        for (index, cell) in cells.enumerated() {
//            use origin.y or CGAffineTransform and set y has same effect!
//            cell.transform = CGAffineTransform(translationX: 0, y: tableHeight)
            cell.frame.origin.y = tableHeight
            UIView.animate(withDuration: 1.0, delay: 0.04 * Double(index), usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: [], animations: {
//                cell.transform = CGAffineTransform(translationX: 0, y: 0);
                cell.frame.origin.y = 0
            }, completion: nil)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.dataSource.count
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return self.cellHeight
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        //创建cell
        let cell = UITableViewCell(style: .default, reuseIdentifier: "animationInTableViewCell")
        
        //定义cell文本,以及文本颜色
        cell.textLabel?.text = self.dataSource[indexPath.row]
        cell.textLabel?.textColor = UIColor.white
        
        //定义cell背景色
        let bgView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.cellHeight))
        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bgView.frame
        let lowerColor:CGColor = UIColor(red: (CGFloat(indexPath.row * 2) * self.colorRatio)/255.0, green: 1.0, blue: (CGFloat(indexPath.row * 2) * self.colorRatio)/255.0, alpha: 1).cgColor
        let upperColor:CGColor = UIColor(red: (CGFloat(indexPath.row * 2) * self.colorRatio + self.colorRatio)/255.0, green: 1.0, blue: (CGFloat(indexPath.row * 2) * self.colorRatio + self.colorRatio)/255.0, alpha: 1).cgColor

        gradientLayer.colors = [lowerColor,upperColor]
        bgView.layer.addSublayer(gradientLayer)
        cell.addSubview(bgView)
        cell.sendSubview(toBack: bgView)
        cell.frame.origin.y = self.cellHeight
        
        //开启用户交互
        cell.isUserInteractionEnabled = true
        return cell
    }
    
//    todo find how to auto fold the accessory when clicking the actino in button
    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        
        //定义滑动cell时,出现的三个按钮:

标签:tableView,self,SwipeableCell,cell,let,使用,table,swift,frame
From: https://www.cnblogs.com/yaoyezhifan/p/17014712.html

相关文章

  • linux 使用 nohup 运行 python 脚本,脚本中不要有input
    如题服务器系统由windows换为linux后阿里云的个人服务器报警性能受限但是服务器上运行的程序仅有数据采集,windows服务器上运行绰绰有余按理来说linux上会更轻松才对......
  • Rocky9 Mariadb_10.9.4 使用SSL实现主从同步
    一、预备操作#确保主从服务器时间同步#生成自签发证书(CA、主库证书、从库证书)#主库IP:192.168.0.10数据库版本:Mariadb_10.9.4需要证书:/data/ca/ca-cert.pem/data/ca......
  • WPF中使用委托机制更新UI内容
    在开发WPF应用程序时,UI线程不做高负载的工作,需要交给其他工作者线程去干。当工作者线程干完活得到一个结果后需要发送给UI线程进行展示,那最好的方法就是使用委托机制了。如......
  • 使用Spire.Doc来转换文本
    使用Spire.Doc来转换文本前段时间,我为不熟悉这个产品的读者们写了一篇关于我对 Spire.Doc的初识印象。 Spire.Doc是一个专业的Word.NET库,它是专门为开发人员设计的用来......
  • Appscan扫描的web网站有验证码导致登录失败,解决方式:使用固定的cookie、token值进行登
    Appscan扫描的web网站有验证码导致登录失败,解决方式:使用固定的cookie、token值进行登录扫描 步骤:1、登录方式选择‘无’  2、添加cookie方式一:  2)cookie名在......
  • C# 打印PDF文件之使用不同打印机打印所有页面或部分页面
    最近在逛国外各大编程社区论坛的时候,发现很多人都在问一个关于PDF文件打印的问题:打印时如何选择非默认打印机并设置打印页面的范围。而一般情况下,打印时选择的打印机是默认......
  • 使用 SQL 实现同比环比分析
    场景描述在做数据分析时,经常会需要展示同比和环比的数据,可以通过SQL来完成同比和环比的计算,再配合数据可视化工具进行展示,每个月都会自动展示当月数据与上月的对比(环比),以......
  • AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
    丰富组件,满足千人千面!AIRIOT物联网低代码平台的可视化组态引擎,具备丰富的可视化看板及组件,满足各类工艺流程图、数据可视化需求。支持三维编辑、图形绘制、图表设计等......
  • MySQL 5.7 版本的安装及简单使用(图文教程)
    MySQL5.7版本的安装使用详细教程写得还是比较详细,甚至有些繁琐,有很多步骤在其他的教程文档里都是省略掉的,但是我还是要写出来,因为我当时走了很多弯路,我希望你们能够避免我......
  • GF-使用apt下载不同架构的安装包
    以在x86机器上下载la64的安装包为例。添加软件源添加架构sudodpkg--add-architectureloongarch64修改/etc/apt/source.listdeb[arch=loongarch64]http://..........