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
}
}