自定义 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"];

  就这样,当然如果你愿意还可以重载更多方法来完成更伟大的功能!

原文地址:https://www.cnblogs.com/iosdev/p/2855673.html