美文网首页
TableView个人总结 Swift(2019)

TableView个人总结 Swift(2019)

作者: Look2021 | 来源:发表于2019-05-10 09:18 被阅读0次
    lazy var table: UITableView = {
        let table = UITableView(frame: .zero, style: .plain)
        table.delegate = self
        table.dataSource = self
        table.tableFooterView = UIView()
        table.separatorColor = UIColor.placeholderColor
        // 隐藏分割线
        table.separatorStyle = .none
        table.backgroundColor = UIColor.defaultBackgroundColor
        // 设置不能滑动
        table.isScrollEnabled = false
        if #available(iOS 11, *) {
            table.contentInsetAdjustmentBehavior = .never
        }
        // 设置cell自适应高度
        table.estimatedRowHeight = 44
        table.rowHeight = UITableView.automaticDimension
        
        // 设置tableview图片,方框图片,类似聊天气泡
        let backImage = UIImage.init(named: "home_quality_backimage")?.resizableImage(withCapInsets: UIEdgeInsets.init(top: 200, left: 200, bottom: 200, right: 200), resizingMode: .stretch)
        let backImageView = UIImageView.init()
        backImageView.image = backImage
            table.backgroundView = backImageView
        
        return table
    }()
    
    
    刷新某一行
    // 刷新某些行 (传入参数是 元素为IndexPath类型的数组“[IndexPath]”),所以可以刷新某几行
    let indexPath: IndexPath = IndexPath.init(row: 1, section: 0)
    self.tableView.reloadRows(at: [indexPath], with: .fade)
    // 刷新第几组,直接传入要刷新的组数集合 “[section]”
    self.tableView.reloadSections([1], with: .fade)
    
    tableview 滚动到指定位置
    // 滚动一定要在  tableView.reloadData()之后进行
    // 1. 默认  plain 模式 办法1.   
    tableView.contentOffset.y = 0
    //办法2  
    tableView.scrollToRow(at: IndexPath(item: 0, section: 0), at: UITableViewScrollPosition.top, animated: false)
    
    // 2. 分组的 grouped
    //使用以下两个方法 一起使用, 单独使用一个 也会滚动,但是位置 会在第一个去区头表面
    1. tableView.scrollToRow(at: IndexPath(item: 0, section: 0), at: UITableViewScrollPosition.top, animated: false)
    2. tableView.contentOffset.y = 0
    
    当前滚动到哪一行
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let indexPatch = table.indexPathForRow(at: scrollView.contentOffset)
        ddPrint(indexPatch?.section)
        
        let type = GoodsDetailsCellType.init(rawValue: indexPatch?.section ?? 0)
        switch type {
        case .banner?, .titlePrice?, .redActivity?:
            segmentedView.selectItemAt(index: 0)
        case .qualityReport?, .inspectionProcess?:
            segmentedView.selectItemAt(index: 1)
        case .image?:
            segmentedView.selectItemAt(index: 2)
        case .evaluation?:
            segmentedView.selectItemAt(index: 3)
        default:
            break
        }
    }
    
    cell
    // 复用cell
    第一种:
    let cellID = "HDMyViewController"
    var cell = tableView.dequeueReusableCell(withIdentifier: cellID)
    if cell == nil {
        cell = UITableViewCell.init(style: .value1, reuseIdentifier: cellID)
        cell?.accessoryType = .disclosureIndicator
    }
    
    第二种:
    //注册可复用cell
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellId")
    //创建cell,不需要判断是否为空,当没有可重用cell的时候会自动创建
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath)
    cell.textLabel?.text = "\(indexPath.row)"
    
    第三种:
    var cell = tableView.dequeueReusableCell(withIdentifier: cellID) as? TextFieldCell
    if cell == nil {
       cell = TextFieldCell.init(style: .default, reuseIdentifier: cellID)
      }
    return cell!
    
    // 设置点击cell的背景颜色
    let backView = UIView.init()
    backView.backgroundColor = .init(hex: "FFFCF9")
    selectedBackgroundView = backView
    // 设置cell的右边为箭头
    cell?.accessoryType = .disclosureIndicator
    

    Delegate

    extension ListViewController: UITableViewDelegate,UITableViewDataSource {
        
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return tableData.count
        }
        
        func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            return UIView()
        }
        
        func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 0.01
        }
        
        func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
            return UIView()
        }
        
        func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
            return 0.01
        }
    
        // 全选删除
        func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
            return UITableViewCellEditingStyle(rawValue: UITableViewCellEditingStyle.delete.rawValue | UITableViewCellEditingStyle.insert.rawValue)!
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            return tableView.cellForRow(at: indexPath) ?? UITableViewCell()
        }
    
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            tableView.deselectRow(at: indexPath, animated: true)
        }
    }
        
        // 左滑删除
        func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
            return true
        }
        
        func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
            return UITableViewCell.EditingStyle.delete
        }
        
        func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? {
            return localizedString(forKey: "删除")
        }
        
        func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
            tableData.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .automatic)
        }
    

    可以部分自适应高度,也可以固定高度

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let type = GoodsDetailsCellType.init(rawValue: indexPath.section)
        switch type {
        case .inspectionProcess?:
            return 10
        default:
            return UITableView.automaticDimension
        }
    }
    

    相关文章

      网友评论

          本文标题:TableView个人总结 Swift(2019)

          本文链接:https://www.haomeiwen.com/subject/lckooqtx.html