UICollectionReusableView与UITableViewHeaderFooterView都继承自UIView, 显示效果类似常见的UITableView Group分组区头区尾
How to use?
UICollectionReusableView用法
创建一个继承UICollectionReusableView的MyCollectionReusableView
1
2
3
4
5
6
7
8
9
//MyCollectionReusableView.h
#import <UIKit/UIKit.h>
@interface MyCollectionReusableView : UICollectionReusableView
@property (nonatomic, copy) NSString *labelText;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//MyCollectionReusableView.m
#import "MyCollectionReusableView.h"
@interface MyCollectionReusableView()
@property (nonatomic, strong) UILabel *textLabel;
@end
@implementation MyCollectionReusableView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self configSubviews];
}
return self;
}
- (void)configSubviews {
[self addSubview:self.textLabel];
}
- (void) setLabelText:(NSString *)labelText {
self.label.text = text;
}
- (UILabel *)textLabel {
if (!_textLabel) {
_textLabel = [[UILabel alloc] init];
}
return _textLabel;
}
@end
UICollectionReusableView 同 UICollectionViewCell 一样需要提前注册:
1
2
3
[self.collectionView registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MyCollectionReusableViewHeaderID"];
[self.collectionView registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"MyCollectionReusableViewFooterID"];
然后实现UICollectionViewDataSource协议方法:
1
2
3
4
5
6
7
8
9
10
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
if (kind == UICollectionElementKindSectionHeader) {
MyCollectionReusableView *reusableHeaderView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"MyCollectionReusableViewHeaderID" forIndexPath:indexPath];
reusableHeaderView.labelText = [NSString stringWithFormat:@"%tu", indexPath.section];
return reusableHeaderView;
}
MyCollectionReusableView *reusableFooterView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"MyCollectionReusableViewFooterID" forIndexPath:indexPath];
reusableFooterView.labelText = [NSString stringWithFormat:@"%tu", indexPath.section];
return reusableFooterView;
}
最终效果:
UITableViewHeaderFooterView用法
创建一个继承UITableViewHeaderFooterView的MyTableViewHeaderFooterView
1
2
3
4
5
6
7
8
9
//MyTableViewHeaderFooterView.h
#import <UIKit/UIKit.h>
@interface MyTableViewHeaderFooterView : UITableViewHeaderFooterView
@property (nonatomic, copy) NSString *labelText;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//MyTableViewHeaderFooterView.m
#import "MyTableViewHeaderFooterView.h"
@interface MyTableViewHeaderFooterView()
@property (nonatomic, strong) UILabel *textLabel;
@end
@implementation MyTableViewHeaderFooterView
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
[self configSubviews];
}
return self;
}
- (void)configSubviews {
[self addSubview:self.textLabel];
}
- (void) setLabelText:(NSString *)labelText {
self.label.text = text;
}
- (UILabel *)textLabel {
if (!_textLabel) {
_textLabel = [[UILabel alloc] init];
}
return _textLabel;
}
@end
注意UITableViewHeaderFooterView的初始化方法为:
1
- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier;
UITableViewHeaderFooterView 同样也需要提前注册:
1
[self.tableView registerClass:[MyTableViewHeaderFooterView class] forHeaderFooterViewReuseIdentifier:@"MyTableViewHeaderFooterViewID"];
然后实现UITableViewDataSource协议方法:
1
2
3
4
5
6
7
8
9
10
11
12
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
MyTableViewHeaderFooterView *headerView = [MyTableViewHeaderFooterView dequeueReusableHeaderFooterViewWithIdentifier:@"MyTableViewHeaderFooterViewID"];
headerView.labelText = [NSString stringWithFormat:@"%tu", indexPath.section];
return headerView;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
MyTableViewHeaderFooterView *footerView = [MyTableViewHeaderFooterView dequeueReusableHeaderFooterViewWithIdentifier:@"MyTableViewHeaderFooterViewID"];
footerView.labelText = [NSString stringWithFormat:@"%tu", indexPath.section];
return footerView;
}
效果参考UICollectionReusableView