ios拓展35-Cell创建方法
由于笔者之前半年的时间主要做bug定位修复,以及数据加密代码混淆一类的安全类工作.有相当长一段时间没有用tableView了.突然有个需求用到了,竟然忘了UITableViewCell的创建与区别.所以今天总结一下.总共有4种方法 1.方法一,最简单的初始化
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cee"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cee"];
}
cell.textLabel.text = @"aa";
return cell;
}
2.方法二,使用xib创建
//xib创建
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:nil options:nil].lastObject;
}
return cell;
}
3.方法三,注册cell类
//不用做cell==nil判断
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"aa"];
// Do any additional setup after loading the view from its nib.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"aa" forIndexPath:indexPath];
return cell;
}
4.方法四,注册xib
//不用做cell==nil判断;
xib创建
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:@"aa" bundle:nil] forCellReuseIdentifier:@"aa"];
// Do any additional setup after loading the view from its nib.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"aa" forIndexPath:indexPath];
return cell;
}
5.register的作用
使用dequeueReusableCellWithIdentifier: forIndexPath: 必须使用配套的
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
或者
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier这个方法。对每一个tableview的cell进行注册。
//但是 注册cell不方便设置cell的Style
6.dequeueReusableCellWithIdentifier: forIndexPath:区别
带indexPath的方法总是返回一个cell(也就是说不可能为空),另一个方法是有可能为nil的;
即:在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中可以省略以下代码:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
7.使用xib注意 【ios拓展35-Cell创建方法】
当sb或xib中的identifier与当前不匹配->查找identifier的正确性
文章图片
image.png
推荐阅读
- java系列|Vue —— axios、插槽
- Taro框架完美使用Axios
- 【iOS开发】iOS中的桥接
- ios|盖茨砸数亿美元阻挠推特被收购(马斯克(卑劣的行为))
- iOS-拍照和调用本地图片
- iOS逆向dumpdecrypted的使用
- iOS|iOS, xcode, "Thread 1 signal sigabrt"
- iOS实现简单长截图
- iOS原生与RN的通信(Swift版)
- iOS开发TableView网络请求及展示预加载实现示例