Skip to content

Commit 23f92b5

Browse files
committed
Implement ‘AutoRegistering’ Protocol
- Updated examples - Updated docs
1 parent 406165f commit 23f92b5

13 files changed

Lines changed: 502 additions & 47 deletions

Example/ReusableDemo iOS/CollectionViewCells/MyColorSquareCell.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import Reusable
1818
* This view is NOT loaded from a NIB (but defined entierly by code),
1919
* that's why it's not annotated as `NibLoadable` but only `Reusable`
2020
*/
21-
final class MyColorSquareCell: UICollectionViewCell, Reusable {
21+
final class MyColorSquareCell: UICollectionViewCell, Reusable, AutoRegistering {
2222
private lazy var colorView: UIView = {
2323
let colorView = UIView()
2424
colorView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

Example/ReusableDemo iOS/CollectionViewController.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ final class CollectionViewController: UICollectionViewController {
1515
guard let collectionView = self.collectionView else { return }
1616

1717
// Register cell classes
18-
collectionView.register(cellType: MyColorSquareCell.self)
1918
collectionView.register(cellType: MyXIBIndexSquaceCell.self)
19+
20+
/* Since MyColorSquareCell is marked as conforming to AutoRegistering,
21+
there's no need to register this type ahead of time */
22+
//collectionView.register(cellType: MyColorSquareCell.self)
23+
2024
// No need to register this one, the UIStoryboard already auto-register its cells
2125
// self.collectionView.registerReusableCell(MyStoryBoardIndexPathCell)
2226

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//
2+
// MyAutoRegisterHeaderTableView.swift
3+
// ReusableDemo
4+
//
5+
// Created by TJB on 07/08/18.
6+
// Copyright © 2018 ApptekStudios. All rights reserved.
7+
//
8+
9+
import UIKit
10+
import Reusable
11+
12+
/**
13+
* This view is loaded from a NIB, and is the XIB file's
14+
* root view (and not the File's Owner). => it is `NibLoadable`
15+
*
16+
* It is also reusable and has a `reuseIdentifier` (as it's a TableViewHeaderFooterView
17+
* and it uses the TableView recycling mechanism) => it is `Reusable`
18+
*
19+
* That's why it's annotated with the `NibReusable` typealias,
20+
* Which in fact is just a convenience typealias that combines
21+
* `NibLoadable` & `Reusable` protocols.
22+
*/
23+
final class MyAutoRegisterTableViewHeader: UITableViewHeaderFooterView, NibReusable, AutoRegistering {
24+
25+
@IBOutlet private weak var titleLabel: UILabel!
26+
27+
static let height: CGFloat = 55
28+
29+
func fillForSection(_ section: Int) {
30+
self.titleLabel.text = "Header Section #\(section)"
31+
}
32+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
3+
<device id="retina4_7" orientation="portrait">
4+
<adaptation id="fullscreen"/>
5+
</device>
6+
<dependencies>
7+
<deployment identifier="iOS"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
9+
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
10+
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
11+
</dependencies>
12+
<objects>
13+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
14+
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
15+
<view contentMode="scaleToFill" id="okZ-6Z-SVm" customClass="MyAutoRegisterTableViewHeader" customModule="ReusableDemo_iOS" customModuleProvider="target">
16+
<rect key="frame" x="0.0" y="0.0" width="298.5" height="55"/>
17+
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
18+
<subviews>
19+
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5FU-EW-ITI">
20+
<rect key="frame" x="0.0" y="0.0" width="298.5" height="55"/>
21+
<color key="backgroundColor" red="0.20392156862745098" green="0.45098039215686275" blue="0.72941176470588232" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
22+
</view>
23+
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="My HeaderView" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hYf-aH-s8i">
24+
<rect key="frame" x="8" y="13" width="121" height="21"/>
25+
<fontDescription key="fontDescription" type="system" pointSize="17"/>
26+
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
27+
<nil key="highlightedColor"/>
28+
</label>
29+
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zZ4-Xm-Xca" userLabel="Blue Bar">
30+
<rect key="frame" x="8" y="42" width="239" height="5"/>
31+
<color key="backgroundColor" red="0.80177218539999995" green="0.88913449410000001" blue="0.95461380880000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
32+
<constraints>
33+
<constraint firstAttribute="height" constant="5" id="k9e-UV-gvq"/>
34+
</constraints>
35+
</view>
36+
</subviews>
37+
<constraints>
38+
<constraint firstItem="hYf-aH-s8i" firstAttribute="leading" secondItem="zZ4-Xm-Xca" secondAttribute="leading" id="Q4E-ve-ADj"/>
39+
<constraint firstAttribute="trailing" secondItem="5FU-EW-ITI" secondAttribute="trailing" id="cAb-OQ-i7v"/>
40+
<constraint firstAttribute="bottom" secondItem="zZ4-Xm-Xca" secondAttribute="bottom" constant="8" id="g2M-WH-Mhw"/>
41+
<constraint firstItem="5FU-EW-ITI" firstAttribute="leading" secondItem="okZ-6Z-SVm" secondAttribute="leading" id="hue-vz-jI7"/>
42+
<constraint firstItem="zZ4-Xm-Xca" firstAttribute="top" secondItem="hYf-aH-s8i" secondAttribute="bottom" constant="8" symbolic="YES" id="kvp-aL-8Hr"/>
43+
<constraint firstItem="zZ4-Xm-Xca" firstAttribute="leading" secondItem="okZ-6Z-SVm" secondAttribute="leading" constant="8" id="orC-Gd-rNO"/>
44+
<constraint firstItem="zZ4-Xm-Xca" firstAttribute="width" secondItem="okZ-6Z-SVm" secondAttribute="width" multiplier="8/10" id="owR-gy-XJA"/>
45+
<constraint firstAttribute="bottom" secondItem="5FU-EW-ITI" secondAttribute="bottom" id="tc9-uM-9sG"/>
46+
<constraint firstItem="5FU-EW-ITI" firstAttribute="top" secondItem="okZ-6Z-SVm" secondAttribute="top" id="wsU-Ky-EUd"/>
47+
</constraints>
48+
<nil key="simulatedStatusBarMetrics"/>
49+
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
50+
<connections>
51+
<outlet property="titleLabel" destination="hYf-aH-s8i" id="TCO-Yc-dDI"/>
52+
</connections>
53+
<point key="canvasLocation" x="356.25" y="211.5"/>
54+
</view>
55+
</objects>
56+
</document>

Example/ReusableDemo iOS/TableViewCells/MyHeaderTableView.swift renamed to Example/ReusableDemo iOS/TableViewCells/MyTableViewHeader.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Reusable
1515
*
1616
* That's why it's annotated with the `NibOwnerLoadable` protocol.
1717
*/
18-
final class MyHeaderTableView: UIView, NibOwnerLoadable {
18+
final class MyTableViewHeader: UIView, NibOwnerLoadable {
1919

2020
@IBOutlet private weak var titleLabel: UILabel!
2121
static let height: CGFloat = 55
@@ -30,6 +30,6 @@ final class MyHeaderTableView: UIView, NibOwnerLoadable {
3030
}
3131

3232
func fillForSection(_ section: Int) {
33-
self.titleLabel.text = "Header Section #\(section)"
33+
self.titleLabel.text = "Header Section #\(section) (manual load)"
3434
}
3535
}

Example/ReusableDemo iOS/TableViewCells/MyHeaderTableView.xib renamed to Example/ReusableDemo iOS/TableViewCells/MyTableViewHeader.xib

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
2+
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
33
<device id="retina4_7" orientation="portrait">
44
<adaptation id="fullscreen"/>
55
</device>
66
<dependencies>
77
<deployment identifier="iOS"/>
8-
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
8+
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
99
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
1010
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
1111
</dependencies>
1212
<objects>
13-
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyHeaderTableView" customModule="ReusableDemo" customModuleProvider="target">
13+
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MyTableViewHeader" customModule="ReusableDemo_iOS" customModuleProvider="target">
1414
<connections>
1515
<outlet property="titleLabel" destination="hYf-aH-s8i" id="WZ1-Km-cgw"/>
1616
</connections>

Example/ReusableDemo iOS/TableViewCells/MyXIBInfoCell.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Reusable
2020
* Which in fact is just a convenience typealias that combines
2121
* `NibLoadable` & `Reusable` protocols.
2222
*/
23-
final class MyXIBInfoCell: UITableViewCell, NibReusable {
23+
final class MyXIBInfoCell: UITableViewCell, NibReusable, AutoRegistering {
2424

2525
@IBOutlet private weak var titleLabel: UILabel!
2626
private var info: String = "<Info?>"

Example/ReusableDemo iOS/TableViewController.swift

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,44 @@ final class TableViewController: UITableViewController {
1616

1717
tableView.register(cellType: MySimpleColorCell.self)
1818
tableView.register(cellType: MyXIBTextCell.self)
19-
tableView.register(cellType: MyXIBInfoCell.self)
19+
20+
/* Since MyXIBInfoCell is marked as conforming to AutoRegistering,
21+
there's no need to register this type ahead of time */
22+
// tableView.register(cellType: MyXIBInfoCell.self)
2023

2124
/* No need to register this one, the UIStoryboard already auto-register its cells */
22-
// tableView.registerReusableCell(MyStoryBoardIndexPathCell)
25+
// tableView.registerReusableCell(MyStoryBoardIndexPathCell)
2326
}
2427

2528
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
26-
return MyHeaderTableView.height
29+
switch section {
30+
case 0:
31+
return MyTableViewHeader.height
32+
default:
33+
return MyAutoRegisterTableViewHeader.height
34+
}
2735
}
2836

2937
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
30-
let frame = CGRect(
31-
x: 0,
32-
y: 0,
33-
width: tableView.bounds.size.width,
34-
height: self.tableView(tableView, heightForHeaderInSection: section)
35-
)
36-
// See the overridden `MyHeaderTableView.init(frame:)` initializer, which
37-
// automatically loads the view content from its nib using loadNibContent()
38-
let view = MyHeaderTableView(frame: frame)
39-
40-
view.fillForSection(section)
41-
return view
38+
switch section {
39+
case 0:
40+
let frame = CGRect(
41+
x: 0,
42+
y: 0,
43+
width: tableView.bounds.size.width,
44+
height: self.tableView(tableView, heightForHeaderInSection: section)
45+
)
46+
// See the overridden `MyHeaderTableView.init(frame:)` initializer, which
47+
// automatically loads the view content from its nib using loadNibContent()
48+
let view = MyTableViewHeader(frame: frame)
49+
view.fillForSection(section)
50+
return view
51+
default:
52+
// This header class is set to auto-register itself
53+
let view: MyAutoRegisterTableViewHeader = tableView.dequeueReusableHeaderFooterView()
54+
view.fillForSection(section)
55+
return view
56+
}
4257
}
4358

4459
override func numberOfSections(in tableView: UITableView) -> Int {
@@ -61,6 +76,7 @@ final class TableViewController: UITableViewController {
6176
textCell.fill("{section \(indexPath.section), row \(indexPath.row)}")
6277
return textCell
6378
case 2:
79+
// Note that auto-register is enabled here
6480
let infoCell = tableView.dequeueReusableCell(for: indexPath) as MyXIBInfoCell
6581
infoCell.fill("InfoCell #\(indexPath.row)", info: "Info #\(indexPath.row)", details: "Details #\(indexPath.row)")
6682
return infoCell

Example/ReusableDemo.xcodeproj/project.pbxproj

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@
3535
37E3FC761E55CDD8000A7436 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 37E3FC751E55CDD8000A7436 /* Assets.xcassets */; };
3636
37E3FC7E1E55D056000A7436 /* MyCustomWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37E3FC7D1E55D056000A7436 /* MyCustomWidget.swift */; };
3737
37E3FC801E55D08C000A7436 /* MyCustomWidget.xib in Resources */ = {isa = PBXBuildFile; fileRef = 37E3FC7F1E55D08C000A7436 /* MyCustomWidget.xib */; };
38-
3BC2191F1CFC259F003BE78C /* MyHeaderTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC2191D1CFC259F003BE78C /* MyHeaderTableView.swift */; };
39-
3BC219201CFC259F003BE78C /* MyHeaderTableView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3BC2191E1CFC259F003BE78C /* MyHeaderTableView.xib */; };
38+
3BC2191F1CFC259F003BE78C /* MyTableViewHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC2191D1CFC259F003BE78C /* MyTableViewHeader.swift */; };
39+
3BC219201CFC259F003BE78C /* MyTableViewHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3BC2191E1CFC259F003BE78C /* MyTableViewHeader.xib */; };
4040
47EE563C1D66155100AD3E4D /* MyCustomWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EE563B1D66155100AD3E4D /* MyCustomWidget.swift */; };
4141
47EE563E1D66155D00AD3E4D /* MyCustomWidget.xib in Resources */ = {isa = PBXBuildFile; fileRef = 47EE563D1D66155D00AD3E4D /* MyCustomWidget.xib */; };
4242
73E86102FC28DA0699B75437 /* Pods_ReusableDemo_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2606E6E047118D562E70F0CF /* Pods_ReusableDemo_tvOS.framework */; };
43+
B818B06E2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = B818B06C2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.swift */; };
44+
B818B06F2119BE8700D0BF37 /* MyAutoRegisterTableViewHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = B818B06D2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.xib */; };
4345
/* End PBXBuildFile section */
4446

4547
/* Begin PBXFileReference section */
@@ -78,12 +80,14 @@
7880
37E3FC771E55CDD8000A7436 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
7981
37E3FC7D1E55D056000A7436 /* MyCustomWidget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyCustomWidget.swift; sourceTree = "<group>"; };
8082
37E3FC7F1E55D08C000A7436 /* MyCustomWidget.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyCustomWidget.xib; sourceTree = "<group>"; };
81-
3BC2191D1CFC259F003BE78C /* MyHeaderTableView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyHeaderTableView.swift; sourceTree = "<group>"; };
82-
3BC2191E1CFC259F003BE78C /* MyHeaderTableView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyHeaderTableView.xib; sourceTree = "<group>"; };
83+
3BC2191D1CFC259F003BE78C /* MyTableViewHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyTableViewHeader.swift; sourceTree = "<group>"; };
84+
3BC2191E1CFC259F003BE78C /* MyTableViewHeader.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyTableViewHeader.xib; sourceTree = "<group>"; };
8385
47EE563B1D66155100AD3E4D /* MyCustomWidget.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MyCustomWidget.swift; sourceTree = "<group>"; };
8486
47EE563D1D66155D00AD3E4D /* MyCustomWidget.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MyCustomWidget.xib; sourceTree = "<group>"; };
8587
80A8538E60254C825B7D505B /* Pods-ReusableDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReusableDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReusableDemo/Pods-ReusableDemo.debug.xcconfig"; sourceTree = "<group>"; };
8688
868A47776F0B74DD17857FFE /* Pods_ReusableDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ReusableDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
89+
B818B06C2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyAutoRegisterTableViewHeader.swift; sourceTree = "<group>"; };
90+
B818B06D2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MyAutoRegisterTableViewHeader.xib; sourceTree = "<group>"; };
8791
CFC3794861C2D883C20E9AC8 /* Pods-ReusableDemo iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReusableDemo iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS.debug.xcconfig"; sourceTree = "<group>"; };
8892
E7E0B2333D96C0FED6D45DD1 /* Pods-ReusableDemo tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReusableDemo tvOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ReusableDemo tvOS/Pods-ReusableDemo tvOS.debug.xcconfig"; sourceTree = "<group>"; };
8993
FB77CDB068583366F960D03D /* Pods-ReusableDemo iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReusableDemo iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-ReusableDemo iOS/Pods-ReusableDemo iOS.release.xcconfig"; sourceTree = "<group>"; };
@@ -171,8 +175,10 @@
171175
09B3461F1C4ED34F00BA041F /* TableView Cells */ = {
172176
isa = PBXGroup;
173177
children = (
174-
3BC2191D1CFC259F003BE78C /* MyHeaderTableView.swift */,
175-
3BC2191E1CFC259F003BE78C /* MyHeaderTableView.xib */,
178+
3BC2191D1CFC259F003BE78C /* MyTableViewHeader.swift */,
179+
3BC2191E1CFC259F003BE78C /* MyTableViewHeader.xib */,
180+
B818B06C2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.swift */,
181+
B818B06D2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.xib */,
176182
09B346201C4ED39700BA041F /* MyXIBTextCell.swift */,
177183
09B346211C4ED39700BA041F /* MyXIBTextCell.xib */,
178184
09B346261C4ED51600BA041F /* MyXIBInfoCell.swift */,
@@ -347,9 +353,10 @@
347353
47EE563E1D66155D00AD3E4D /* MyCustomWidget.xib in Resources */,
348354
09441AE21D32A0390029B8A6 /* InfoViewController.storyboard in Resources */,
349355
09B346141C4ED26F00BA041F /* Assets.xcassets in Resources */,
356+
B818B06F2119BE8700D0BF37 /* MyAutoRegisterTableViewHeader.xib in Resources */,
350357
09B346251C4ED4CE00BA041F /* Default-568h@2x.png in Resources */,
351358
09B346121C4ED26F00BA041F /* Main.storyboard in Resources */,
352-
3BC219201CFC259F003BE78C /* MyHeaderTableView.xib in Resources */,
359+
3BC219201CFC259F003BE78C /* MyTableViewHeader.xib in Resources */,
353360
09B346421C4EF71900BA041F /* MyXIBIndexSquaceCell.xib in Resources */,
354361
09B346291C4ED51600BA041F /* MyXIBInfoCell.xib in Resources */,
355362
);
@@ -496,13 +503,14 @@
496503
09B346411C4EF71900BA041F /* MyXIBIndexSquaceCell.swift in Sources */,
497504
09B346341C4EDC7D00BA041F /* MyStoryBoardIndexPathCell.swift in Sources */,
498505
09B346221C4ED39700BA041F /* MyXIBTextCell.swift in Sources */,
506+
B818B06E2119BCB100D0BF37 /* MyAutoRegisterTableViewHeader.swift in Sources */,
499507
47EE563C1D66155100AD3E4D /* MyCustomWidget.swift in Sources */,
500508
09B3463C1C4EF46100BA041F /* MyStoryboardTextSquareCell.swift in Sources */,
501509
09B3463E1C4EF4A400BA041F /* CollectionViewController.swift in Sources */,
502510
09B3460F1C4ED26F00BA041F /* TableViewController.swift in Sources */,
503511
09441AE41D32A0700029B8A6 /* InfoDetailViewController.swift in Sources */,
504512
09B3460D1C4ED26F00BA041F /* AppDelegate.swift in Sources */,
505-
3BC2191F1CFC259F003BE78C /* MyHeaderTableView.swift in Sources */,
513+
3BC2191F1CFC259F003BE78C /* MyTableViewHeader.swift in Sources */,
506514
09441AE61D32A07D0029B8A6 /* InfoViewController.swift in Sources */,
507515
09B346281C4ED51600BA041F /* MyXIBInfoCell.swift in Sources */,
508516
09B346441C4EF8B700BA041F /* CollectionHeaderView.swift in Sources */,

0 commit comments

Comments
 (0)