欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

荐 (史上最全版)Swfi UITableView全选,返选,取消,删除,确认

程序员文章站 2023-08-22 13:41:38
本次重点讲述如何使用Swfit语言,在TableView列表上做(全选、返选、取消、删除,提交确认)功能。1.我们为什么要做这些功能?如今互联网移动时代,比如:我们常见使用购物、教学、支付APP等,都需要用到多选以及单选列表,获取到点击的唯一ID,达到实现项目需求。2.主要功能有哪些?? 列表:通过TableView获取到列表信息;字段:如,Name、Email、UUID、MAC地址等 按钮:左上角返回键,右上角编辑+取消键,下方固定左侧(全选+返选),右侧确认键3.效果图:二:代码区:...

本次重点讲述如何使用Swfit语言,在TableView列表上做(全选、返选、编辑、取消、提交确认)功能。

1.我们为什么要做这些功能?

如今互联网移动时代,比如:我们常见使用购物、教学、支付APP等,都需要用到多选以及单选列表,获取到点击的唯一ID,达到实现项目需求。

2.主要功能有哪些??

  • 列表:通过TableView获取到列表信息;字段:如,Name、Email、UUID、MAC地址等
  • 按钮:左上角返回键,右上角编辑+取消键,下方固定左侧(全选+返选),右侧确认键

操作如下:

  • 要点击编辑状态,才可以进行选中列表,否则会给予提示
  • 默认是为编辑(不能选中/全选)-右上角点击编辑,变为取消(可以选中/全选/返选)
  • 全选列表之后,再单击某个列表,就是取消当前的选中
  • 确认:数组列表不能为空,否则给予失败提示

3.效果图:

荐
                                                        (史上最全版)Swfi UITableView全选,返选,取消,删除,确认

二:代码区:

cell!.selectionStyle = .none(千万不要写这个,不然列表不能选中)

 1. 定义的类文件,代理方法,变量的介绍
class PurchaseController: BaseViewController,PurchaseProtocol,PurchaseCellProtocol,PurchaseViewProtocol,UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate{
   
    var purchaseView = PurchaseView()//view层
    
    var purchaseCell = PurchaseCell()//cell层
    
    var indexArray :[String] = []//用于接收选中列表后点击确认的数组

    private var deviceList = Array<PurchaseManList>()//读取到服务器的数组列表

	private var spage = 1//服务器参数
    
    private var spagesize = 10//服务器参数

	private var purchasePresenter = PurchasePresenter<PurchaseController>()//接口类实现代理

	private var selectArray = Array<PurchaseManList>()//用于接收选中列表的数组

}
	//初始化
	override func viewDidLoad() {
        super.viewDidLoad()
    }
	//标题
    override func customContentView(){
        navigationController?.navigationBar.barTintColor =  UIColor(hexString: "#353535", transparency: 1.0)
        navigationController?.navigationBar.tintColor = UIColor.white
        navigationItem.title = "采购订单"
    }
    
     //右边按钮键
     override func customNavigationRightItem() {
        item = UIBarButtonItem(title:"编辑", style: .plain, target: self, action: #selector(onSetClick))
         item.tintColor = UIColor.white
         navigationItem.rightBarButtonItem = item
     }
     //启动程序的运行时
	override func viewWillAppear(_ animated: Bool) {
        
           pad_cancal_ok = "ok"//判断只有在编辑的状态下才可以选中
        
           purchasePresenter.initial(self)
           //设备数据层初始化
           purchasePresenter.PurchaseListJson(page:spage, pagesize:spagesize)
           //显示加载出来
           showHud()
    }

    override func initView() {
        let view = UIView()
        purchaseView.delegate = self
        purchaseCell.delegate = self
        purchaseView.tableView?.delegate = self
        purchaseView.tableView?.dataSource = self
        purchaseView.tableView?.tableFooterView = view
        purchaseView.frame = self.view.bounds
        self.view.addSubview(purchaseView)
        //设置允许单元格多选
        purchaseView.tableView!.register(UITableViewCell.self,
        forCellReuseIdentifier: PURCHASECONTROLLERTABELTEXT)
        
        purchaseView.tableView?.allowsMultipleSelectionDuringEditing = true

    }

	override func initData() {
        select = false
        purchaseView.uniselsctAll?.isHidden = true
        purchaseView.checkAll?.isHidden = false
    }

右上角点击按钮事件处理

@objc func onSetClick(){

        if(purchaseView.tableView!.isEditing == false) {
            pad_cancal_ok = "no"
            item.title = "取消";
            purchaseView.tableView!.setEditing(true, animated:true)
        }
        else {
            pad_cancal_ok = "ok"
            item.title = "编辑";
            indexArray.removeAll()
            purchaseView.tableView!.setEditing(false, animated:true)
            purchaseView.uniselsctAll?.isHidden = true
            purchaseView.checkAll?.isHidden = false
        }
     }

得到服务器列表数据的成功/失败的返回

    func getPurchaseSuccess(result: Array<PurchaseManList>) {
        hidHud()
        if result.count > 0{
            deviceList = result
            purchaseView.tableView?.reloadData()
         }else{
             WHToast.showMessage("The data is empty.", originY: 500, duration: 2, finishHandler: {
             })
         }
    }

    func getPurchaseFail(result: String) {
        hidHud()
        WHToast.showMessage(result, originY: 500, duration: 2, finishHandler: {
        })
        print("失败");
    }

点击确认按钮的处理

    func onPurchasAffirm() {
        print("wo shi afirm2",indexArray)
       
        if indexArray.count > 0 {
            var ids: [String] = []
            //拿到selectArray里面的model,取id,为ids数组
            for model in indexArray{
                ids.append(model)
            }
            print("indexArray",ids)
            print("sever",selectArray.count)
        }
    }

返选按钮的处理:

 	func onUniselsctAllClick(){
        
        indexArray.removeAll()//返选删除选中的数组
        purchaseView.tableView?.reloadData()//刷新列表
        purchaseView.uniselsctAll?.isHidden = true//隐藏返选
        purchaseView.checkAll?.isHidden = false//打开全选
        
    }

全选按钮的处理:

    func onChckAllClick(){
    	//点击全选的时候,判断是不是为编辑的状态
        if pad_cancal_ok.hasPrefix("ok") {
            print("ok")
            return
        }else{
            print("noo")
            if(purchaseView.tableView!.isEditing == false) {
                purchaseView.uniselsctAll?.isHidden = true//隐藏返选
                purchaseView.checkAll?.isHidden = false//打开全选
            }else {
                purchaseView.uniselsctAll?.isHidden = false//打开返选
                purchaseView.checkAll?.isHidden = true//隐藏全选
                
                for i in 0..<deviceList.count {
                    print("第\(i)次")
                    let model = deviceList[i]
                    //拿到devicelist列表的索引,取pono唯一订单号ID,进行添加或删除
                    print("(model.pono!)")
                    //把ID添加到数组
                    indexArray.append(model.pono!)
                        // NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
                        purchaseView.checkAll!.isSelected = !purchaseView.checkAll!.isSelected
                        if purchaseView.checkAll!.isSelected {
                            let count = self.deviceList.count
                            var indexArray :[IndexPath] = []
                            if count > 0 {
                                for i in 0...count - 1{
                                    let index = IndexPath(row: i, section: 0)
                                    indexArray.append(index)
                                }
                            }
                            selectArray.removeAll()//移除现有选择数组的数据
                            selectArray = deviceList//将数据源的所有数据赋值给选择数据
                            for index in indexArray{
  				//这个为所有列表循环出来后全选中 
     			 purchaseView.tableView?.selectRow(at: index, animated: false, scrollPosition: UITableView.ScrollPosition.none)
                              print("az",index)
                            }
                        }
                }
            }
        }
    }

UITableView的处理:

cell!.selectionStyle = .none(千万不要写这个,不然列表不能选中)

	//多少个列表数据
	 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return deviceList.count
    }

    func numberOfSections(in tableView: UITableView) -> Int {
         return 1
    }

	//cell样式
	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         var cell:PurchaseCell? = tableView.dequeueReusableCell(withIdentifier: PURCHASECONTROLLERTABELTEXT) as? PurchaseCell
               if cell == nil{
                   cell = PurchaseCell(style: .default, reuseIdentifier: PURCHASECONTROLLERTABELTEXT)
                   //cell!.selectionStyle = .none
               }
        
               if deviceList.count > 0{
                   if indexPath.row < deviceList.count{
                       let model = deviceList[indexPath.row]

                       if !cmUtil.isEmpty(model.supplier_Name){
                           cell?.deviceNmaeLabel?.text = model.supplier_Name
                       }

                       if !cmUtil.isEmpty(model.pono){
                           cell?.deviceTimeLabel?.text = model.pono
                       }
                    
                   }
               }
             return cell!;
    }

//列表点击事件
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        var cell:PurchaseCell? = tableView.dequeueReusableCell(withIdentifier: PURCHASECONTROLLERTABELTEXT) as? PurchaseCell
              if cell == nil{
                  cell = PurchaseCell(style: .default, reuseIdentifier: PURCHASECONTROLLERTABELTEXT)
                  //cell!.selectionStyle = .none(千万不要写这个,不然列表不能选中)
              }
        if(deviceList.count > 0){
            let model = deviceList[indexPath.row]
            print("vz",model.pono as Any);
            //判断为true就是tableview选中,返选,为false就是进入详情界面
            if(purchaseView.tableView!.isEditing == false) {
                let reginserVc = OrderdetailController()
                reginserVc.codeid = model.pono;
                self.navigationController?.pushViewController(reginserVc, animated:true)
                print( "OrderdetailController")
            }
            else {
               print("选择当前的列表")
                indexArray.append(model.pono!)
            }
        }
    }
    
//点击列表取消选中的处理:
 func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        print("a")
        
        var cell:PurchaseCell? = tableView.dequeueReusableCell(withIdentifier: PURCHASECONTROLLERTABELTEXT) as? PurchaseCell
        if cell == nil{
            cell = PurchaseCell(style: .default, reuseIdentifier: PURCHASECONTROLLERTABELTEXT)
            //cell!.selectionStyle = .none
        }
        
        if(deviceList.count > 0){
            let model = deviceList[indexPath.row]
            if indexArray.firstIndex(of: model.pono!) != nil {
                let arr2 = indexArray.filter{$0 != model.pono!}
                 print("kkk",arr2);
                indexArray.removeAll()//删除所有选中的列表数组
                indexArray.append(contentsOf: arr2)//再进行添加,因为这里每次返选都是取消唯一一个ID,如果不清除所有的,连续返选点击清除,就会依照之前整个indexArray数组,再清除点击的ID
            }

             print("hhhhhh",model.pono as Any);
        }
        
        if (purchaseView.tableView!.isEditing == true) {
            return;
        }
        purchaseView.tableView?.deselectRow(at: indexPath,animated:true);

    //High
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 90
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        //section header High
        return 18
    }

    //section bottom space
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 20
    }
}

荐
                                                        (史上最全版)Swfi UITableView全选,返选,取消,删除,确认
整个重点细节都在以上阐述了,大家一起互相学习,刚踏入Swfit,如有写的不好之处,可提出留言,谅解!希望能帮助到你…

本文地址:https://blog.csdn.net/qq_37523448/article/details/107173804