Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >iOS UITableView的使用

iOS UITableView的使用

作者头像
码客说
发布于 2019-10-22 06:41:59
发布于 2019-10-22 06:41:59
86700
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

代理

添加代理 UITableViewDelegate,UITableViewDataSource

数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var tableData = [
        ["image":"lm_user","text":"账号"],
        ["image":"lm_photo","text":"相册"],
        ["image":"lm_star","text":"收藏"],
        ["image":"lm_file","text":"文件"],
        ["image":"lm_setting","text":"设置"],
        ["image":"lm_SIP","text":"SIP"]
    ]

Cell类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class LeftMenuCell: UITableViewCell {

    @IBOutlet weak var leftImageView: UIImageView!
    @IBOutlet weak var rightLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
    
    func setItemData(itemData:[String:String])  {
        leftImageView.image = UIImage.init(named: itemData["image"]!);
        rightLabel.text = itemData["text"];
    }
    
}

初始化

初始化及代理方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func initTableView(){
    //设置分割线样式
    self.tableView.separatorStyle = .none;
    self.tableView.register(UINib.init(nibName: "LeftMenuCell", bundle: nil), forCellReuseIdentifier: "LeftMenuCell");
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
}
    
func numberOfSections(in tableView: UITableView) -> Int {
    return 1;
}
    
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.tableData.count;
}
    
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 0.1;
}
    
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 0.1;
}
    
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return UIView();
}
    
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return UIView();
}
    
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 60;
}
    
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let itemData  = self.tableData[indexPath.row];
    let  cell = tableView.dequeueReusableCell(withIdentifier: "LeftMenuCell", for: indexPath) as! LeftMenuCell;
    cell.setItemData(itemData: itemData);
    return cell;
}
    
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let itemData = self.tableData[indexPath.row];
    ZJFunc.unselectCell(tableView: tableView);
}

Cell自动高度

参见文章:iOS 设置tableViewCell的高度

代码中使用到的工具类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import UIKit
class ZJFunc{
    
    ///延迟执行方法
    static func delay(delay:Double, closure:@escaping ()->()) {
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay) {
            closure();
        }
    }
    
    ///异步调用方法
    static func async(block:@escaping ()->(),callBack:@escaping()->()){
        DispatchQueue(label: NSDate().description).async {
            block();
            DispatchQueue.main.async {
                callBack();
            }
        }
    }
    
    ///取消选中的tablecell
    static func unselectCell(tableView: UITableView)->Void{
        delay(delay: 0.1) {
            if(tableView.indexPathForSelectedRow != nil){
                tableView.deselectRow(at: tableView.indexPathForSelectedRow!, animated: true);
            }
        }
    }
    
    ///打电话
    static func phone(phone:String,viewController:UIViewController)->Void{
        let str = "tel:\(phone)";
        let callWebView = UIWebView();
        viewController.view.addSubview(callWebView);
        callWebView.loadRequest(URLRequest(url:URL(string:str)!))
    }
    
    ///发短信
    static func msg(phone:String)->Void{
        let str = "sms:\(phone)";
        UIApplication.shared.openURL(URL(string:str)!);
    }
    ///获取随机正整数
    static func randomNum(num:Int)->Int{
        let randomNum = Int(arc4random_uniform(UInt32(num)));
        return randomNum;
    }
    
    ///距离scrollView底部的距离
    static func scrollViewSpaceToButtom(scrollView: UIScrollView)->CGFloat{
        let offset = scrollView.contentOffset;
        let bounds = scrollView.bounds;
        let size = scrollView.contentSize;
        let inset = scrollView.contentInset;
        let currentOffset = offset.y + bounds.size.height - inset.bottom;
        let maximumOffset = size.height;
        
        //当currentOffset与maximumOffset的值相等时,说明scrollview已经滑到底部了。也可以根据这两个值的差来让他做点其他的什么事情
        let space = maximumOffset-currentOffset;
        return space;
    }
    
    ///判断系统是否大于某版本号
    static func isVersion(version:String)-> Bool{
        switch UIDevice.current.systemVersion.compare(version, options: NSString.CompareOptions.numeric) {
        case .orderedSame, .orderedDescending:
            return true;
        case .orderedAscending:
            return false;
        }
    }
    
    ///Cell抖动动画
    static func animateView(view: UIView) {
        let animation = CAKeyframeAnimation()
        animation.keyPath = "position.x"
        animation.values =  [0, 20, -20, 10, 0]
        animation.keyTimes = [
            NSNumber(value:0),
            NSNumber(value:1.0 / 6.0),
            NSNumber(value:3 / 6.0),
            NSNumber(value:5.0 / 6.0),
            NSNumber(value:1)
        ]
        animation.duration = 0.35
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
        animation.isAdditive = true
        view.layer.add(animation, forKey: "shake")
    }
    
    
    static func animateViewY(view: UIView) {
        let animation = CAKeyframeAnimation()
        animation.keyPath = "position.y"
        animation.values =  [0, 10, 0, 5, 0]
        animation.keyTimes = [
            NSNumber(value:0),
            NSNumber(value:1.0 / 6.0),
            NSNumber(value:3 / 6.0),
            NSNumber(value:5.0 / 6.0),
            NSNumber(value:1)
        ]
        animation.duration = 0.35
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        animation.isAdditive = true
        view.layer.add(animation, forKey: "shake")
    }
    
    static func animateViewBgColor(view: UIView) {
        let animation = CABasicAnimation()
        animation.keyPath = "backgroundColor"
        animation.fromValue = view.layer.backgroundColor;
        animation.toValue = UIColor.groupTableViewBackground.cgColor;
        
        animation.duration = 0.33
        animation.fillMode = kCAFillModeBoth
        view.layer.add(animation, forKey: nil)
        
        let animation2 = CABasicAnimation()
        animation2.keyPath = "cornerRadius"
        animation2.fromValue = view.layer.cornerRadius;
        animation2.toValue = view.frame.width/8;
        animation2.duration = 0.33
        animation2.fillMode = kCAFillModeBoth
        view.layer.add(animation2, forKey: nil)
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Swift 书面 ToDo App
下面的代码是使用的全部Xcode Version 6.0.1 (6A317)书面。
全栈程序员站长
2022/07/06
1.5K0
Swift 书面 ToDo App
iOS-TableView统一数据源代理
TableView 是 iOS 应用程序中非常通用的组件,几乎每一个界面都有一个TableView,而我们许多的代码都和TableView有关系,比如数据展示、更新TableView,一些响应选择事件等,而这些大多都会通过其代理函数来实现,所以在VC中我们通常需要实现大量TableView的代理函数,如下面这样
用户2215591
2018/08/02
9340
Swift日常开发随笔
提示:之所以为空白,是因为我把下拉列表中的tableView.reloadData()这行代码屏蔽掉了,加入的数组没有刷新。
编程怪才-凌雨画
2020/10/11
2K0
iOS UITableView代理方法详解 原
在上一篇博客中,http://my.oschina.net/u/2340880/blog/404605,我将IOS中tableView(表视图)的一些常用方法总结了一下,这篇将tableView的代理方法作了总结,对上一篇博客进行了补充。
珲少
2018/08/15
1.4K0
从案例出发,由浅到深了解 iOS 动画
iOS 的动画框架很成熟,提供必要的信息,譬如动画的起始位置与终止位置,动画效果就出来了
猿_人类
2019/11/07
7840
自学Swift之路(二)UITableView自定义和实际利用
本系列文章都是以有OC基础来写的,所以注释不会写太多,对基础不够了解的同学可能不太适合,另外本系列文章不是以教程式的形式来写,是记录学习过程的,所以不会有多少讲解 OK,承接上一篇文章,这次开始UIT
清墨
2018/05/07
2.4K0
自学Swift之路(二)UITableView自定义和实际利用
iOS - Swift UITableView的scrollToRow的"坑"
简介 在tableView中,我们一般会用到scrollToRow这个来控制tableView滚到指定的某一行。一般写法如下所示 // MARK: 滚到底部 func scrollToBottom(animated: Bool = false) { if dataArr.count > 0 { tableView.scrollToRow(at: IndexPath(row: dataArr.count - 1, section: 0), at: .bottom, animated:
LinXunFeng
2018/06/29
1.8K0
高效学习iOS —— Stroke和路径动画
先添加需要的代码,这里需要将storyboard的ViewController换成
CC老师
2022/01/14
1.9K0
高效学习iOS —— Stroke和路径动画
[iOS]swift中UITableView使用.grouped样式时设置cell两侧边距以及实现圆角
在iOS13之后苹果为我们提供了新的样式选项.insetGrouped,如果使用这个样式的话,苹果会为我们自动实现每个section的圆角,而且cell两侧有相应的间距。这个我在这里不再说明,大家可以自行体验。
柯柯哥
2023/12/22
7500
iOS中表视图(UITableView)使用详解
- (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;  
珲少
2018/08/15
1.4K0
【swift学习笔记】三.使用xib自定义UITableViewCell
使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewc
lpxxn
2018/01/31
2K0
【swift学习笔记】三.使用xib自定义UITableViewCell
iOS 10 ~ iOS 15 tableview 适配(使用注意事项)
参考:https://www.jianshu.com/p/b42030a37953 https://blog.csdn.net/weixin_34037977/article/details/91634236
清墨
2022/11/12
2.1K0
iOS 10 ~ iOS 15 tableview 适配(使用注意事项)
UITableView实践(一):实现原理
我们知道在iOS上开发的视图使用UIKit,Mac OS则没有。Chameleon项目就是将UIKit的代码也可以运行在macOS上。我们可以通过Chameleon项目的源码来一探究竟,UITableView是如何实现的。
Helloted
2022/06/07
9650
UITableView实践(一):实现原理
iOS Core Animation的用法
越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低;反之亦然。本文着重介绍Core Animation层的基本动画实现方案。
码客说
2019/10/22
1.4K0
效果类似于label从下往上滑(采用uiTableView实现)
首先附上效果图 进行描述一下:效果就是类似于是一个竖直方向的滚动视图 并且方向是从下往上  并且能够一直这样循环下去。 代码“ // // ViewController.m // demo滚动视图
用户1219438
2018/02/01
1.1K0
效果类似于label从下往上滑(采用uiTableView实现)
抛弃UITableView,让所有列表页不再难构建
虽然抛弃UITableView是不存在的,但是看完这篇文章确实能让90%的列表页抛弃UITableView,让界面易实现易复用。
iOSSir
2019/06/14
1.7K0
iOS开发之BLE(二)——外设连接与断开
在iOS开发之BLE(一)——理论知识一文中,主要对iOS开发中BLE的基本理论知识进行了介绍,本文以中心模式为例讲解蓝牙的连接过程,并进行案例实践。
YungFan
2019/03/22
3.1K0
iOS开发之BLE(二)——外设连接与断开
iOS开发之多表视图滑动切换示例(仿"头条"客户端)
  好长时间没为大家带来iOS开发干货的东西了,今天给大家分享一个头条新闻客户端各个类别进行切换的一个示例。在Demo中对所需的组件进行的简单封装,在封装的组件中使用的是纯代码的形式,如果想要在项目中进行使用,稍微进行修改即可。   废话少说,先介绍一下功能点,下图是整个Demo的功能点,最上面左边的TabBarButtonItem是用来减少条目的,比如下图有三个按钮,点击减号会减少一个条目。右边的为增加一个条目。点击相应的按钮是切换到对应的表视图上,下方红色的是滑动的指示器,同时支持手势滑动。运行具体效果
lizelu
2018/01/11
3.8K0
iOS开发之多表视图滑动切换示例(仿"头条"客户端)
【IOS开发基础系列】Table View开发专题
    A table view is an instance of theUITableView class in one of two basic styles, plain or grouped. A plain table view is an unbroken list; a grouped table view has visually distinct sections. A table view has a data source and might have a delegate. The data source object provides the data for populating the sections and rows of the table view. The delegate object customizes its appearance and behavior.
江中散人_Jun
2023/10/16
3930
【IOS开发基础系列】Table View开发专题
IOS UITableView 表格嵌套
自定义表格控件:CustomizeUITableViewCell.swif //自定义单元格,单元格高度动态调整 1 import UIKit 2 3 class CustomizeUITableViewCell:UITableViewCell, UITableViewDataSource, UITableViewDelegate { 4 5 var tableView:UITableView!; 6 var comments:[String] = [] 7 8 override init
用户5760343
2019/07/08
1K0
IOS UITableView 表格嵌套
相关推荐
Swift 书面 ToDo App
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验