前言:iOS项目中使用UITableView可谓是非常频繁,下面以三种不同的方式简单介绍一下Swift当中TableView的使用 第一种方式: 继承自UIViewController创建控制器,然后初始化TableView,遵守其代理,实现其代理方法,根据需求设置行高行数,初始化一个系统样式cell,显示相应数据
import UIKit
class 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 UIKit
class CustomCellController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override 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 UIKit
class 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
}
}
复制代码
第三种方法: 该方法控制器继承自UIViewController,采用Nib方式自动以cell, 该方式需要注意的是控制器中注册的时候的Identifier应和nib中的相同
import UIKit
class 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源码github.com/daomoer/YYS…