Swift4.2|Swift4.2 UITableView 基本用法
前言:iOS项目中使用UITableView可谓是非常频繁,下面以三种不同的方式简单介绍一下Swift当中TableView的使用
第一种方式:
继承自UIViewController创建控制器,然后初始化TableView,遵守其代理,实现其代理方法,根据需求设置行高行数,初始化一个系统样式cell,显示相应数据
import UIKitclass ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{var tableView:UITableView!
var array:[String] = ["纯代码自定义cell", "nib自定义cell"]
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = "UITableIView小解"
self.view.backgroundColor = UIColor.white
tableView = UITableView(frame:CGRect(x:0, y:0, width:UIScreen.main.bounds.width, height:UIScreen.main.bounds.height))
tableView.delegate = self
tableView.dataSource = self
self.view.addSubview(tableView)
}
// 每个分区行数(默认分区为一个)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return array.count
}
// 行高
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 60.0
}
// cell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: "CellIdentifier")
cell.textLabel?.text = array[indexPath.row]
return cell
}
// cell点击事件处理
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
switch indexPath.row {
case 0:
let vc = CustomCellController()
self.navigationController?.pushViewController(vc, animated: true)
break
case 1:
let vc = NibCellController()
self.navigationController?.pushViewController(vc, animated: true)
break
default:break
}
}
}
文章图片
第一种方式效果图 第二种方式:
该种方式采用继承自UITableViewController,并采用纯代码方式自定义cell。(继承了UITableViewController,会帮助我们自动初始化,并遵守代理实现代理方法)
// 控制器中代码
import UIKitclass CustomCellController: UITableViewController {override func viewDidLoad() {
super.viewDidLoad()}
// MARK: - Table view data sourceoverride func numberOfSections(in tableView: UITableView) -> Int {
return 1
}override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let identifier = "CustomCell"
let cell = CustomTableViewCell.init(style: UITableViewCellStyle.default, reuseIdentifier: identifier)
cell.setValueForCell()
return cell
}
// 自定义cell CustomTableViewCell中代码
import UIKitclass CustomTableViewCell: UITableViewCell {
var iconImage: UIImageView?
var titleLabel: UILabel?
var subTitleLabel : UILabel?required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setUpUI()
}func setUpUI(){
// 图片
iconImage = UIImageView(frame: CGRect(x:10, y: 10, width:60, height: 60))
self.addSubview(iconImage!)// 大标题
titleLabel = UILabel(frame: CGRect(x:(iconImage?.frame.size.width)!+20, y:10, width: self.frame.size.width-(iconImage?.frame.size.width)!+20, height:30))
titleLabel?.textColor = UIColor.red
self.addSubview(titleLabel!)// 副标题
subTitleLabel = UILabel(frame: CGRect(x:(iconImage?.frame.size.width)!+20, y:(titleLabel?.frame.size.height)!+20, width:self.frame.size.width-(iconImage?.frame.size.width)!+20, height: 30))
subTitleLabel?.font = UIFont.systemFont(ofSize: 14)
subTitleLabel?.textColor = UIColor.purple
self.addSubview(subTitleLabel!)
}// 给cell赋值,项目中一般使用model,我这里直接写死了
func setValueForCell(){
iconImage?.image = UIImage(named:"image")
titleLabel?.text = "大大大大的标题"
subTitleLabel?.text = "副副副副的标题"
}override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)// Configure the view for the selected state
}}
文章图片
第二种方式效果图 【Swift4.2|Swift4.2 UITableView 基本用法】第三种方法:
该方法控制器继承自UIViewController,采用Nib方式自动以cell, 该方式需要注意的是控制器中注册的时候的Identifier应和nib中的相同
import UIKitclass NibCellController: UIViewController ,UITableViewDataSource, UITableViewDelegate{let identifier = "NibTableViewCell"
var tableView : UITableView?override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
tableView = UITableView(frame:CGRect(x:0, y:0, width:UIScreen.main.bounds.width, height:UIScreen.main.bounds.height))
tableView?.delegate = self
tableView?.dataSource = self
self.view.addSubview(tableView!)
// 注册nib
let nib = UINib.init(nibName: "NibTableViewCell", bundle: nil)
tableView?.register(nib, forCellReuseIdentifier: identifier)
}func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier)
return cell!
}
}
文章图片
第三种方式效果图 github源码https://github.com/daomoer/YYSwiftLearnDemos/tree/master/YYTableView
推荐阅读
- 12操作系统面临的安全威胁安全脆弱性基本概念
- 操作系统|操作系统基本概念汇总
- Hive数据仓库工具基本架构和入门部署详解
- 笔记篇|通信原理学习笔记(一)(通信系统基本概念和组成)
- 微信小程序|计算机毕业设计springboot+vue基本安卓/微信小程序的健康管理系统 uniapp
- mongo|mongo shell基本命令
- 读书笔记(《美丽圣经》01)
- 模特的基本礼仪常识_模特的基本礼仪修养
- 投稿|小米造车新事:工程样车基本完成,或推出系列车型
- 嵌入式基础|ARM 内核寄存器 和 基本汇编语言讲解