UITableView 基本使用和优化

本文探讨了在iOS开发中优化UITableView的局部刷新和数据源分离的方法。建议使用Cell池来管理Cell,避免使用`dequeueReusableCell`,以提高刷新效率并支持滑动删除。同时,详细介绍了如何实现UITableViewDataSource和UITableViewDelegate,以及自定义UITableViewCell的过程。
摘要由CSDN通过智能技术生成

优化:局部刷新,时刻谨记View和数据源分离
继承UITableViewDataSourceUITableViewDelegate然后指定数据源:

 _tableView.backgroundColor = AppColor.main_them
 _tableView.delegate = self
 _tableView.dataSource = self
 _tableView.separatorStyle = .none
 //GameListViewCell派生UITableViewCell
 //forCellReuseIdentifier作为一类Cell的标记,随便定义
 //关于register方法,本人不太推荐,不好维护
 //_tableView.register(GameListViewCell.self, forCellReuseIdentifier: "list_speed_cell")

重写UITableViewDataSource指定数据的种类和数量以及根据forCellReuseIdentifier返回对应的cell

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
		//返回section中的行数量
        return _gameData.count
    }
    
 
 //返回cell   
 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        //网上很多博客的用法都是使用dequeueReusableCell
        //在这里不建议,一是不方便维护,二是如果存在滑动删除的话,在刷新的时候删除会缩回
        //这里本人建议使用一个Cell池,大小为当前窗口可显示的大小的2倍即可。
        //刷新局部或者指定Cell的时候,遍历Cell池查找指定的Cell刷新即可,因为如果用户可见,则Cell一定在池子中
        //let cell = tableView.dequeueReusableCell(withIdentifier: "list_speed_cell",for:indexPath) as! GameListViewCell
        let cell = _cellPool[indexPath.row%_cellPoolMax]
        cell._delegate = self
        cell.setData(gameItem: _gameData[indexPath.row])
        print("cell row:\(indexPath.row),selection:\(indexPath.section)")
        return cell;
    }

如果需要自定义Cell的话,可以直接从UITableViewCell派生,然后在构造里面初始化UI,在layoutSubviews里面进行布局即可。

class GameListViewCell: UITableViewCell {
	override func layoutSubviews() {
        	super.layoutSubviews()
        	//进行子控件布局
    }
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        initView()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        
        initView()
    }
	private func initView() {
	//进行UI规划,关于UI布局篇可以参考
	//https://blog.csdn.net/CAir2/article/details/120198494
	}
}

至于更多关于Selection和Row之间的关系以及自定义UI,可以自行学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值