TableView个人总结 Swift(2019)

2019-05-10  本文已影响0人  Look2021
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
    }
}
上一篇下一篇

猜你喜欢

热点阅读