自定义 UITableViewCell
自定义Cell当然很简单,subclass UITableViewCell,分2种,一种自己定义Nib文件,一种不使用Nib文件:
当然依照个人选择,我喜欢少写代码,使用Nib文件。
1. 添加文件继承自 UITableViewCell。
2. 使用Nib文件。添加User Interface -> View 文件,IB拖拽一个TableViewCell控件(删除原来的View)。
3. 对自定义的Cell进行自定义,当然像你设计的那样的设计。
4. 这里我主要说在 UITableView的delegate方法中的使用
1)不使用nib文件,当然很简单了
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"XXXCell" ]; if (cell == nil) { cell = [[ActivityCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } return cell; } |
2)使用Nib文件
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell" ; ActivityCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray* views = [[NSBundle mainBundle] loadNibNamed: @"XXXCell" owner:nil options:nil]; for (UIView *view in views) { if ([view isKindOfClass:[UITableViewCell class ]]) { cell = (XXXCell*)view; } } } return cell; } |
好了,其实这里我们已经完成了,但是看这个cellForRow中的代码有点多,还有循环,乱糟糟,那就拿出去吧!(使用Nib文件的情况下)
1 .h 文件
#import <UIKit/UIKit.h> @ interface XXXCell : UITableViewCell { } + (BBCell *)cellFromNibNamed:(NSString *)nibName; @end |
2 .m文件
#import "XXXCell.h" @implementation BBCell + (BBCell *)cellFromNibNamed:(NSString *)nibName { NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:NULL]; NSEnumerator *nibEnumerator = [nibContents objectEnumerator]; XXXCell *customCell = nil; NSObject* nibItem = nil; while ((nibItem = [nibEnumerator nextObject]) != nil) { if ([nibItem isKindOfClass:[XXXCell class ]]) { customCell = (XXXCell *)nibItem; break ; } } return customCell; } @end |
3. 使用,在代理方法中
cell = [[[XXXCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: @"XXXCell" ] autorelease]; |
替换
cell = (XXXDetailCell *)[XXXCell cellFromNibNamed: @"XXXCell" ]; |
就这样,当然如果你愿意还可以重载更多方法来完成更伟大的功能!
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· BotSharp + MCP 三步实现智能体开发
· BotSharp 5.0 MCP:迈向更开放的AI Agent框架
· 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
· 【ESP32】两种模拟 USB 鼠标的方法
· 设计模式脉络