自定义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"];
就这样,当然如果你愿意还可以重载更多方法来完成更伟大的功能!