Skip to content

Commit e8a5c77

Browse files
committed
Refactor for example group method.
Add a customized collection view layout entrance
1 parent b9c5464 commit e8a5c77

8 files changed

+80
-23
lines changed

Examples/MJRefreshExample/MJRefreshExample.xcodeproj/project.pbxproj

+7-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
0133FBBF2693FA8E00E98F66 /* CustomLanguages.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0133FBBE2693FA8E00E98F66 /* CustomLanguages.bundle */; };
11+
013557022AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */; };
1112
018C0838274787B6002D968E /* MJRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018C083427478732002D968E /* MJRefresh.framework */; };
1213
018C0839274787B6002D968E /* MJRefresh.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018C083427478732002D968E /* MJRefresh.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1314
0193FF132692E99500B52B11 /* I18NExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0193FF122692E99500B52B11 /* I18NExampleViewController.swift */; };
@@ -78,6 +79,7 @@
7879
0133FBBC2693F81700E98F66 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
7980
0133FBBD2693F81F00E98F66 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
8081
0133FBBE2693FA8E00E98F66 /* CustomLanguages.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = CustomLanguages.bundle; sourceTree = "<group>"; };
82+
013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MJPinHeaderCollectionViewController.swift; sourceTree = "<group>"; };
8183
018C082F27478732002D968E /* MJRefresh.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MJRefresh.xcodeproj; path = ../../MJRefresh.xcodeproj; sourceTree = "<group>"; };
8284
0193FF122692E99500B52B11 /* I18NExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = I18NExampleViewController.swift; sourceTree = "<group>"; };
8385
0193FF172692F8EB00B52B11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
@@ -181,7 +183,6 @@
181183
isa = PBXGroup;
182184
children = (
183185
01A5EB2A25EF62B80091554E /* MJWKWebViewController.swift */,
184-
01A5EB2925EF62B80091554E /* MJRefreshExample-Bridging-Header.h */,
185186
);
186187
path = SwiftExample;
187188
sourceTree = "<group>";
@@ -245,6 +246,7 @@
245246
children = (
246247
2D9BEAFF1BB15F4A00AED473 /* MJCollectionViewController.h */,
247248
2D9BEB001BB15F4A00AED473 /* MJCollectionViewController.m */,
249+
013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */,
248250
6B8FB1A7250E610D00AF64B7 /* MJHorizontalCollectionViewController.h */,
249251
6B8FB1A8250E610D00AF64B7 /* MJHorizontalCollectionViewController.m */,
250252
2D9BEB011BB15F4A00AED473 /* MJTableViewController.h */,
@@ -283,6 +285,7 @@
283285
isa = PBXGroup;
284286
children = (
285287
2DA7F94E1AA6B51C005627AB /* Classes */,
288+
01A5EB2925EF62B80091554E /* MJRefreshExample-Bridging-Header.h */,
286289
2DA7F9281AA6B4C4005627AB /* Supporting Files */,
287290
);
288291
path = MJRefreshExample;
@@ -476,6 +479,7 @@
476479
2D9BEB091BB15F4A00AED473 /* UIViewController+Example.m in Sources */,
477480
6B8FB1A9250E610D00AF64B7 /* MJHorizontalCollectionViewController.m in Sources */,
478481
2D9BEB111BB15F4A00AED473 /* MJExampleViewController.m in Sources */,
482+
013557022AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift in Sources */,
479483
2D9BEB0C1BB15F4A00AED473 /* MJChiBaoZiHeader.m in Sources */,
480484
2D9BEB191BB15F4A00AED473 /* MJTestViewController.m in Sources */,
481485
2D9BEB151BB15F4A00AED473 /* MJTempViewController.m in Sources */,
@@ -655,7 +659,7 @@
655659
);
656660
PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
657661
PRODUCT_NAME = "$(TARGET_NAME)";
658-
SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/Classes/SwiftExample/MJRefreshExample-Bridging-Header.h";
662+
SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/MJRefreshExample-Bridging-Header.h";
659663
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
660664
SWIFT_VERSION = 5.0;
661665
};
@@ -676,7 +680,7 @@
676680
);
677681
PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
678682
PRODUCT_NAME = "$(TARGET_NAME)";
679-
SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/Classes/SwiftExample/MJRefreshExample-Bridging-Header.h";
683+
SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/MJRefreshExample-Bridging-Header.h";
680684
SWIFT_VERSION = 5.0;
681685
};
682686
name = Release;

Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExample.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
@property (copy, nonatomic) NSString *header;
1313
@property (strong, nonatomic) NSArray *titles;
1414
@property (strong, nonatomic) NSArray *methods;
15-
@property (assign, nonatomic) Class vcClass;
15+
@property (strong, nonatomic) NSArray<Class> *vcClasses;
1616
@end

Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleViewController.m

+19-17
Original file line numberDiff line numberDiff line change
@@ -34,41 +34,35 @@ - (NSArray *)examples
3434
if (!_examples) {
3535
MJExample *exam0 = [[MJExample alloc] init];
3636
exam0.header = MJExample00;
37-
exam0.vcClass = [MJTableViewController class];
37+
exam0.vcClasses = @[[MJTableViewController class]];
3838
exam0.titles = @[@"默认", @"动画图片", @"隐藏时间", @"隐藏状态和时间", @"自定义文字", @"自定义刷新控件"];
3939
exam0.methods = @[@"example01", @"example02", @"example03", @"example04", @"example05", @"example06"];
4040

4141
MJExample *exam1 = [[MJExample alloc] init];
4242
exam1.header = MJExample10;
43-
exam1.vcClass = [MJTableViewController class];
43+
exam1.vcClasses = @[[MJTableViewController class]];
4444
exam1.titles = @[@"默认", @"动画图片", @"隐藏刷新状态的文字", @"全部加载完毕", @"禁止自动加载", @"自定义文字", @"加载后隐藏", @"自动回弹的上拉01", @"自动回弹的上拉02", @"自定义刷新控件(自动刷新)", @"自定义刷新控件(自动回弹)"];
4545
exam1.methods = @[@"example11", @"example12", @"example13", @"example14", @"example15", @"example16", @"example17", @"example18", @"example19", @"example20", @"example21"];
4646

4747
MJExample *exam2 = [[MJExample alloc] init];
4848
exam2.header = MJExample20;
49-
exam2.vcClass = [MJCollectionViewController class];
50-
exam2.titles = @[@"上下拉刷新"];
51-
exam2.methods = @[@"example21"];
49+
exam2.vcClasses = @[MJCollectionViewController.class, MJPinHeaderCollectionViewController.class, MJHorizontalCollectionViewController.class];
50+
exam2.titles = @[@"上下拉刷新", @"上下拉刷新-PinHeader", @"左拉刷新"];
51+
exam2.methods = @[@"example31", @"example31", @"example42"];
5252

5353
MJExample *exam3 = [[MJExample alloc] init];
5454
exam3.header = MJExample30;
55-
exam3.vcClass = [MJWebViewViewController class];
55+
exam3.vcClasses = @[[MJWebViewViewController class]];
5656
exam3.titles = @[@"下拉刷新"];
57-
exam3.methods = @[@"example31"];
57+
exam3.methods = @[@"example40"];
5858

5959
MJExample *exam4 = [[MJExample alloc] init];
6060
exam4.header = MJExample40;
61-
exam4.vcClass = [MJWKWebViewController class];
61+
exam4.vcClasses = @[[MJWKWebViewController class]];
6262
exam4.titles = @[@"下拉刷新"];
6363
exam4.methods = @[@"example41"];
6464

65-
MJExample *exam5 = [[MJExample alloc] init];
66-
exam5.header = MJExample20;
67-
exam5.vcClass = [MJHorizontalCollectionViewController class];
68-
exam5.titles = @[@"左拉刷新"];
69-
exam5.methods = @[@"example42"];
70-
71-
self.examples = @[exam0, exam1, exam2, exam3, exam4, exam5];
65+
self.examples = @[exam0, exam1, exam2, exam3, exam4];
7266
}
7367
return _examples;
7468
}
@@ -120,7 +114,11 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
120114
MJExample *exam = self.examples[indexPath.section];
121115
cell.textLabel.text = exam.titles[indexPath.row];
122116

123-
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@", exam.vcClass, exam.methods[indexPath.row]];
117+
NSInteger classRow = indexPath.row;
118+
if (classRow > exam.vcClasses.count - 1) {
119+
classRow = exam.vcClasses.count - 1;
120+
}
121+
cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@", exam.vcClasses[classRow], exam.methods[indexPath.row]];
124122

125123
return cell;
126124
}
@@ -134,7 +132,11 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte
134132
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
135133
{
136134
MJExample *exam = self.examples[indexPath.section];
137-
UIViewController *vc = [[exam.vcClass alloc] init];
135+
NSInteger classRow = indexPath.row;
136+
if (classRow > exam.vcClasses.count - 1) {
137+
classRow = exam.vcClasses.count - 1;
138+
}
139+
UIViewController *vc = [[exam.vcClasses[classRow] alloc] init];
138140
vc.title = exam.titles[indexPath.row];
139141
[vc setValue:exam.methods[indexPath.row] forKeyPath:@"method"];
140142
[self.navigationController pushViewController:vc animated:YES];

Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.h

+2
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@
1010

1111
@interface MJCollectionViewController : UICollectionViewController
1212

13+
- (void)example31;
14+
1315
@end

Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.m

+10-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ @interface MJCollectionViewController()
2626
@implementation MJCollectionViewController
2727
#pragma mark - 示例
2828
#pragma mark UICollectionView 上下拉刷新
29-
- (void)example21
29+
- (void)example31
3030
{
3131
__weak __typeof(self) weakSelf = self;
3232

@@ -99,6 +99,7 @@ - (id)init
9999
layout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
100100
layout.minimumInteritemSpacing = 20;
101101
layout.minimumLineSpacing = 20;
102+
layout.headerReferenceSize = CGSizeMake(100, 30);
102103
return [self initWithCollectionViewLayout:layout];
103104
}
104105

@@ -112,6 +113,7 @@ - (void)viewDidLoad
112113
);
113114

114115
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJCollectionViewCellIdentifier];
116+
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
115117
}
116118

117119
#pragma mark - collection数据源代理
@@ -129,6 +131,13 @@ - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cell
129131
return cell;
130132
}
131133

134+
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
135+
UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];
136+
view.backgroundColor = UIColor.systemPurpleColor;
137+
138+
return view;
139+
}
140+
132141
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
133142
{
134143
MJTestViewController *test = [[MJTestViewController alloc] init];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//
2+
// MJPinHeaderCollectionViewController.swift
3+
// MJRefreshExample
4+
//
5+
// Created by Frank on 2023/9/18.
6+
// Copyright © 2023 小码哥. All rights reserved.
7+
//
8+
9+
import UIKit
10+
11+
@objcMembers
12+
class MJPinHeaderCollectionViewController: MJCollectionViewController {
13+
14+
convenience init() {
15+
let pinHeaderLayout = PinHeaderFlowLayout()
16+
pinHeaderLayout.itemSize = CGSizeMake(80, 80)
17+
pinHeaderLayout.sectionInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
18+
pinHeaderLayout.minimumInteritemSpacing = 20
19+
pinHeaderLayout.minimumLineSpacing = 20
20+
pinHeaderLayout.headerReferenceSize = CGSize(width: 100, height: 30)
21+
22+
self.init(collectionViewLayout: pinHeaderLayout)
23+
}
24+
25+
override func viewDidLoad() {
26+
super.viewDidLoad()
27+
}
28+
}
29+
30+
@objcMembers
31+
class PinHeaderFlowLayout: UICollectionViewFlowLayout {
32+
override func layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
33+
let attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, with: indexPath)
34+
// TODO: Implementation of PinHeader
35+
36+
return attributes
37+
}
38+
39+
}

Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ @interface MJWebViewViewController () <UIWebViewDelegate>
1818

1919
@implementation MJWebViewViewController
2020
#pragma mark - 示例
21-
- (void)example31
21+
- (void)example40
2222
{
2323
__weak UIWebView *webView = self.webView;
2424
webView.delegate = self;

Examples/MJRefreshExample/MJRefreshExample/Classes/SwiftExample/MJRefreshExample-Bridging-Header.h Examples/MJRefreshExample/MJRefreshExample/MJRefreshExample-Bridging-Header.h

+1
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
//
44

55
#import "MJChiBaoZiHeader.h"
6+
#import "MJCollectionViewController.h"

0 commit comments

Comments
 (0)