做网站公司哪家公司,网站开发最快框架,wordpress加载 jquery,表白网页在线生成网站目录 前言cell的复用手动#xff08;非注册#xff09;自动#xff08;注册#xff09; 自定义cell总结 前言 Cell复用和自定义Cell是在开发iOS应用时常见的一种优化技巧和定制需求。 Cell复用是UITableView或UICollectionView的一个重要优化机制。当用户滚动这些视图时… 目录 前言cell的复用手动非注册自动注册 自定义cell总结 前言 Cell复用和自定义Cell是在开发iOS应用时常见的一种优化技巧和定制需求。 Cell复用是UITableView或UICollectionView的一个重要优化机制。当用户滚动这些视图时只有少量可见的Cell会被实际创建和显示对于那些暂时不可见的Cell系统会将它们缓存起来以备将来复用。这个机制主要是为了提高应用的性能因为创建和销毁视图都是相对高开销的操作通过复用Cell我们可以避免不必要的视图创建和销毁从而提高应用的滚动性能。 自定义Cell可以让你更好地控制Cell的外观和行为提高代码的可读性和可维护性。自定义Cell主要的步骤包括创建自定义Cell类添加UI元素实现初始化方法设置Cell的布局以及在TableView中使用自定义Cell。 在实际开发中我们通常会结合使用Cell复用和自定义Cell以达到既优化性能又满足特定需求的目的。
cell的复用 Cell的复用是一种优化技术主要用于iOS的UITableView和UICollectionView。需要注意的是虽然这两种视图的实现方式略有不同但复用的基本思想是相同的。 当用户滚动UITableView或UICollectionView时屏幕上显示的cell只是所有数据的一小部分。当某个cell滚动出屏幕时系统会将其放入一个队列中等待复用而不是立即销毁。当需要显示新的cell时系统首先会检查这个队列看看是否有可以复用的cell。如果有就直接使用如果没有才会创建新的cell。 这种复用机制可以极大地提高应用的性能。因为创建和销毁视图是相对耗费资源的操作通过复用可以减少这些操作从而使滚动更加流畅。 在实现cell复用时需要给cell设定一个复用标识符reuse identifier然后在需要新的cell时使用这个标识符去请求。如果队列中有可复用的cell系统就会返回一个否则就会创建新的cell。标识符的设定使得我们可以为不同类型的cell设定不同的复用标识符从而在同一个表视图或集合视图中使用多种类型的cell。
手动非注册
手动进行Cell复用主要涉及到以下几个步骤
设置复用标识符在创建Cell的时候我们需要给每个Cell设置一个复用标识符这个标识符通常是一个字符串用来表示这个Cell的类型。在创建Cell的时候我们会把这个标识符作为参数传入。请求重用的Cell在需要显示新的Cell时我们会使用复用标识符去请求一个已经不再显示但是还没有被销毁的Cell。这个请求的过程是通过调用UITableView或UICollectionView的dequeueReusableCell(withIdentifier:)方法来完成的这个方法会返回一个可选类型的Cell如果有可用的重用Cell就会返回一个Cell否则返回nil。配置Cell无论是新创建的Cell还是重用的Cell都需要进行配置以显示新的数据。配置Cell通常会在tableView(:cellForRowAt:)或collectionView(:cellForItemAt:)方法中完成。
代码示例 1. (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString *strID id;UITableViewCell *cell [_tabView dequeueReusableCellWithIdentifier: strID];if (cell nil) {cell [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: strID];}cell.textLabel.text aaa;return cell;
}自动注册
在iOS开发中TableView和CollectionView的Cell复用是自动完成的你只需要正确地设置复用标识符并在需要时请求复用的Cell。具体步骤如下
设置复用标识符当你创建自定义Cell的时候需要为每一个Cell类型设置一个唯一的复用标识符。你可以在Cell的初始化方法中或者在Storyboard中设置这个标识符。请求重用的Cell在tableView(:cellForRowAt:)或collectionView(:cellForItemAt:)方法中你需要使用复用标识符来请求一个可复用的Cell。你可以使用dequeueReusableCell(withIdentifier:)方法来完成这个请求。如果有可复用的Cell这个方法会返回一个Cell否则返回nil。创建新的Cell如果dequeueReusableCell(withIdentifier:)方法返回nil说明没有可复用的Cell你需要创建一个新的Cell。配置Cell对于获得的Cell无论是新创建的还是复用的你都需要按照当前的数据来配置它们。
代码示例 1. (void)viewDidLoad
{[super viewDidLoad];// 如果使用 Nib 自定义 Cell[self.tableView registerNib:[UINib nibWithNibName:CustomCell bundle:nil] forCellReuseIdentifier:myCell];// 如果使用代码自定义 Cell[self.tableView registerClass:[CustomCell class] forCellReuseIdentifier:myCell];
}自定义cell
自定义Cell是在开发iOS应用时常用的一种方式它能让你更好地控制Cell的外观和行为提高代码的可读性和可维护性。自定义Cell主要的步骤包括
创建自定义Cell类首先需要创建一个新的类这个类通常会继承自UITableViewCell或UICollectionViewCell。添加UI元素在这个自定义Cell类中我们可以添加你需要的UI元素如UILabelUIImageView等。实现初始化方法在自定义Cell类的初始化方法中需要初始化我们添加的UI元素并添加到Cell的contentView上。设置Cell的布局还需要在自定义Cell类中设置UI元素的布局可以使用Auto Layout来完成这个任务。在TableView中使用自定义Cell在TableView的tableView(_:cellForRowAt:)方法中我们需要先通过复用标识符尝试获取一个可复用的Cell如果没有获取到那么就创建一个新的自定义Cell实例并返回。
通过自定义Cell我们可以根据自己的需求来定制Cell的外观和行为使我们的应用更具个性化。
代码示例
先创建一个子类myCell从属于UITableViewCell类。 myCell.h
#import UIKit/UIKit.hNS_ASSUME_NONNULL_BEGINinterface myCustomCell : UITableViewCell
property (nonatomic, strong) UILabel *titleLabel;
property (nonatomic, strong) UILabel *subtitleLabel;
endNS_ASSUME_NONNULL_ENDmyCell.m
#import myCell.himplementation myCustomCell- (void)awakeFromNib {[super awakeFromNib];// Initialization code
}- (void)setSelected:(BOOL)selected animated:(BOOL)animated {[super setSelected:selected animated:animated];// Configure the view for the selected state
}
//重写父类的初始化方法根据需求添加自己的逻辑
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {self [super initWithStyle:style reuseIdentifier:reuseIdentifier];if ([reuseIdentifier isEqualToString:indentifierCell]) {_titleLabel [[UILabel alloc] init];_titleLabel.textColor [UIColor blueColor];_titleLabel.font [UIFont systemFontOfSize:20];[self.contentView addSubview:_titleLabel];_subtitleLabel [[UILabel alloc] init];_subtitleLabel.textColor [UIColor cyanColor];_subtitleLabel.font [UIFont systemFontOfSize:15];[self.contentView addSubview:_subtitleLabel];}return self;
}
//重写布局方法根据需求自己设置
- (void)layoutSubviews {_titleLabel.frame CGRectMake(40, 20, self.contentView.bounds.size.width - 40, 20);_subtitleLabel.frame CGRectMake(40, 40, self.contentView.bounds.size.width - 40, 20);
}
endViewController .h
#import UIKit/UIKit.hinterface ViewController : UIViewController//实现数据视图的普通协议
//数据视图的普通事件处理
UITableViewDelegate,
//实现数据视图的数据代理协议
//处理数据视图的数据代理
UITableViewDataSource{//定义一个数据视图对象//数据视图用来显示大量相同格式的信息的视图UITableView* _tableview;
}endViewController .m
#import ViewController.h
#import myCell.hinterface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//创建数据视图_tableview [[UITableView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) style:UITableViewStylePlain];//设置数据视图的代理对象_tableview.delegate self;//设置数据视图的数据源对象_tableview.dataSource self;//注册子类[_tableview registerClass:[myCustomCell class] forCellReuseIdentifier:indentifierCell];[self.view addSubview:_tableview];
}
// 设置数据视图的组数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {return 1;
}
//获取每组元素的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return 15;
}
//创建单元格对象函数
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {myCustomCell* cell [_tableview dequeueReusableCellWithIdentifier:indentifierCell forIndexPath:indexPath];cell.titleLabel.text 一级标题;cell.subtitleLabel.text 二级标题;return cell;
}
end总结 通过对cell的复用和自定义cell我们可以对自己写的页面进行更多的个性化设置。以上就是本篇博客关于cell复用和自定义cell的全部内容欢迎大家学习和指正