博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift4 2 UITableView 基本用法
阅读量:6272 次
发布时间:2019-06-22

本文共 5712 字,大约阅读时间需要 19 分钟。

前言: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 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 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    }}复制代码

第三种方法: 该方法控制器继承自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://juejin.im/post/5c88e4eb5188257e8f617615

你可能感兴趣的文章
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法
查看>>
Mac OS 10.10.3下Apache + mod_wsgi配置【一】
查看>>
Hibernate基于注解的双向one-to-many映射关系的实现
查看>>
算法竞赛入门经典 例题 3-2 蛇形填数
查看>>
remove-duplicates-from-sorted-list I&II——去除链表中重复项
查看>>
c++ 网络库
查看>>
Linux 格式化扩展分区(Extended)
查看>>
linux echo命令
查看>>
nginx 内置变量大全(转)
查看>>
lakala反欺诈建模实际应用代码GBDT监督学习
查看>>
java 解析excel工具类
查看>>
Google FireBase - fcm 推送 (Cloud Messaging)
查看>>
BBS论坛(二十七)
查看>>
html DOM 的继承关系
查看>>
装饰器的邪门歪道
查看>>
Dubbo常用配置解析
查看>>
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>