Skip to content

Commit e46001a

Browse files
committed
实现了简单的高度缓存
1 parent d4a61eb commit e46001a

5 files changed

Lines changed: 28 additions & 14 deletions

File tree

KtTableView/KtTableView/KtBaseTableView.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import "KtBaseTableView.h"
1010
#import "KtBaseTableViewCell.h"
1111
#import "KtTableViewSectionObject.h"
12+
#import "KtTableViewBaseItem.h"
1213

1314
@implementation KtBaseTableView
1415

@@ -40,8 +41,11 @@ - (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPat
4041

4142
KtTableViewBaseItem *object = [dataSource tableView:tableView objectForRowAtIndexPath:indexPath];
4243
Class cls = [dataSource tableView:tableView cellClassForObject:object];
43-
44-
return [cls tableView:tableView rowHeightForObject:object];
44+
45+
if (object.cellHeight == CellInvalidHeight) { // 没有高度缓存
46+
object.cellHeight = [cls tableView:tableView rowHeightForObject:object];
47+
}
48+
return object.cellHeight;
4549
}
4650

4751
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

KtTableView/KtTableView/KtBaseTableViewCell.m

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,6 @@ - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
2424
}
2525

2626
- (void)setObject:(KtTableViewBaseItem *)object { // 子类在这个方法中解析数据
27-
self.height = [[self class] tableView:nil rowHeightForObject:object];
28-
self.width = [[UIScreen mainScreen] bounds].size.width;
29-
30-
self.contentView.height = self.height;
31-
self.contentView.width = self.width;
32-
3327
self.imageView.image = object.itemImage;
3428
self.textLabel.text = object.itemTitle;
3529
self.detailTextLabel.text = object.itemSubtitle;

KtTableView/KtTableView/KtMainTableViewDataSource.m

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,21 @@ - (instancetype)init
1919
self = [super init];
2020
if (self) {
2121
KtTableViewSectionObject *firstSectionObject = [[KtTableViewSectionObject alloc] initWithItemArray:[NSMutableArray arrayWithObjects:
22-
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第一条消息" SubTitle:nil AccessoryImage:nil],
23-
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第二条消息" SubTitle:nil AccessoryImage:nil],
24-
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第三条消息" SubTitle:nil AccessoryImage:nil],
25-
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第四条消息" SubTitle:nil AccessoryImage:nil],
26-
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第五条消息" SubTitle:nil AccessoryImage:nil],
27-
nil]];
22+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第一条消息" SubTitle:nil AccessoryImage:nil],
23+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第二条消息" SubTitle:nil AccessoryImage:nil],
24+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第三条消息" SubTitle:nil AccessoryImage:nil],
25+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第四条消息" SubTitle:nil AccessoryImage:nil],
26+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第五条消息" SubTitle:nil AccessoryImage:nil],
27+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第六条消息" SubTitle:nil AccessoryImage:nil],
28+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第七条消息" SubTitle:nil AccessoryImage:nil],
29+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第八条消息" SubTitle:nil AccessoryImage:nil],
30+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第九条消息" SubTitle:nil AccessoryImage:nil],
31+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第十条消息" SubTitle:nil AccessoryImage:nil],
32+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第十一条消息" SubTitle:nil AccessoryImage:nil],
33+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第十二条消息" SubTitle:nil AccessoryImage:nil],
34+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第十三条消息" SubTitle:nil AccessoryImage:nil],
35+
[[KtTableViewBaseItem alloc] initWithImage:nil Title:@"第十四条消息" SubTitle:nil AccessoryImage:nil],
36+
nil]];
2837
self.sections = [NSMutableArray arrayWithObject: firstSectionObject];
2938
}
3039
return self;

KtTableView/KtTableView/KtTableViewBaseItem.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,12 @@
99
#import <Foundation/Foundation.h>
1010
#import <UIKit/UIKit.h>
1111

12+
FOUNDATION_EXPORT CGFloat const CellInvalidHeight;
13+
1214
@interface KtTableViewBaseItem : NSObject
1315

16+
@property (nonatomic, assign) CGFloat cellHeight;
17+
1418
@property (nonatomic, retain) NSString *itemIdentifier;
1519
@property (nonatomic, retain) UIImage *itemImage;
1620
@property (nonatomic, retain) NSString *itemTitle;

KtTableView/KtTableView/KtTableViewBaseItem.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88

99
#import "KtTableViewBaseItem.h"
1010

11+
CGFloat const CellInvalidHeight = -1;
12+
1113
@implementation KtTableViewBaseItem
1214

1315
- (instancetype)initWithImage:(UIImage *)image Title:(NSString *)title SubTitle:(NSString *)subTitle AccessoryImage:(UIImage *)accessoryImage {
1416
self = [super init];
1517
if (self) {
18+
_cellHeight = CellInvalidHeight;
1619
_itemImage = image;
1720
_itemTitle = title;
1821
_itemSubtitle = subTitle;

0 commit comments

Comments
 (0)