├── .gitignore ├── .swift-version ├── .travis.yml ├── Example ├── MRTableViewManager.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── MRTableViewManager-Example.xcscheme ├── MRTableViewManager.xcworkspace │ └── contents.xcworkspacedata ├── MRTableViewManager │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── EmptyExampleTableViewController.swift │ ├── HeaderExampleTableViewController.swift │ ├── ImageLoader.swift │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── Contents.json │ │ └── imgPreload.imageset │ │ │ ├── Contents.json │ │ │ ├── imgPreload-1.png │ │ │ ├── imgPreload-2.png │ │ │ └── imgPreload.png │ ├── Info.plist │ ├── Interfaces │ │ ├── MRContentTableViewCell.swift │ │ ├── MRContentTableViewCell.xib │ │ ├── MREmptyTableViewCell.swift │ │ ├── MREmptyTableViewCell.xib │ │ ├── MRPreloadTableViewCell.swift │ │ └── MRPreloadTableViewCell.xib │ ├── PreloadExampleTableViewController.swift │ ├── Serializer.swift │ ├── SimpletExampleViewController.swift │ ├── UIImageViewExtension.swift │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── MRTableViewManager.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── MRTableViewManager │ │ ├── Info.plist │ │ ├── MRTableViewManager-dummy.m │ │ ├── MRTableViewManager-prefix.pch │ │ ├── MRTableViewManager-umbrella.h │ │ ├── MRTableViewManager.modulemap │ │ └── MRTableViewManager.xcconfig │ │ ├── Pods-MRTableViewManager_Example │ │ ├── Info.plist │ │ ├── Pods-MRTableViewManager_Example-acknowledgements.markdown │ │ ├── Pods-MRTableViewManager_Example-acknowledgements.plist │ │ ├── Pods-MRTableViewManager_Example-dummy.m │ │ ├── Pods-MRTableViewManager_Example-frameworks.sh │ │ ├── Pods-MRTableViewManager_Example-resources.sh │ │ ├── Pods-MRTableViewManager_Example-umbrella.h │ │ ├── Pods-MRTableViewManager_Example.debug.xcconfig │ │ ├── Pods-MRTableViewManager_Example.modulemap │ │ └── Pods-MRTableViewManager_Example.release.xcconfig │ │ └── Pods-MRTableViewManager_Tests │ │ ├── Info.plist │ │ ├── Pods-MRTableViewManager_Tests-acknowledgements.markdown │ │ ├── Pods-MRTableViewManager_Tests-acknowledgements.plist │ │ ├── Pods-MRTableViewManager_Tests-dummy.m │ │ ├── Pods-MRTableViewManager_Tests-frameworks.sh │ │ ├── Pods-MRTableViewManager_Tests-resources.sh │ │ ├── Pods-MRTableViewManager_Tests-umbrella.h │ │ ├── Pods-MRTableViewManager_Tests.debug.xcconfig │ │ ├── Pods-MRTableViewManager_Tests.modulemap │ │ └── Pods-MRTableViewManager_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── Images ├── gif-1.gif ├── gif-2.gif ├── gif-3.gif └── gif-4.gif ├── LICENSE ├── MRTableViewManager.podspec ├── MRTableViewManager ├── Assets │ └── .gitkeep └── Classes │ ├── .gitkeep │ ├── TableViewCell.swift │ ├── TableViewManager.swift │ ├── TableViewRow.swift │ └── TableViewSection.swift ├── README.md ├── _pods.xcodeproj └── project.pbxproj ├── foobars-header.txt └── foobars.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | # Pods/ 34 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -workspace Example/MRTableViewManager.xcworkspace -scheme MRTableViewManager-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /Example/MRTableViewManager.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 18D7B2582666518CB58285FD /* Pods_MRTableViewManager_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 191DF43A00C48D92808AF56E /* Pods_MRTableViewManager_Tests.framework */; }; 11 | 44B6D001B65EAD430107A071 /* Pods_MRTableViewManager_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0B464AA57CAFFA0B666CDE18 /* Pods_MRTableViewManager_Example.framework */; }; 12 | 59D4B3391D260E80000FBFB5 /* EmptyExampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B32B1D260E80000FBFB5 /* EmptyExampleTableViewController.swift */; }; 13 | 59D4B33A1D260E80000FBFB5 /* HeaderExampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B32C1D260E80000FBFB5 /* HeaderExampleTableViewController.swift */; }; 14 | 59D4B33B1D260E80000FBFB5 /* ImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B32D1D260E80000FBFB5 /* ImageLoader.swift */; }; 15 | 59D4B33C1D260E80000FBFB5 /* MRContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B32F1D260E80000FBFB5 /* MRContentTableViewCell.swift */; }; 16 | 59D4B33D1D260E80000FBFB5 /* MRContentTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 59D4B3301D260E80000FBFB5 /* MRContentTableViewCell.xib */; }; 17 | 59D4B33E1D260E80000FBFB5 /* MREmptyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3311D260E80000FBFB5 /* MREmptyTableViewCell.swift */; }; 18 | 59D4B33F1D260E80000FBFB5 /* MREmptyTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 59D4B3321D260E80000FBFB5 /* MREmptyTableViewCell.xib */; }; 19 | 59D4B3401D260E80000FBFB5 /* MRPreloadTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3331D260E80000FBFB5 /* MRPreloadTableViewCell.swift */; }; 20 | 59D4B3411D260E80000FBFB5 /* MRPreloadTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 59D4B3341D260E80000FBFB5 /* MRPreloadTableViewCell.xib */; }; 21 | 59D4B3421D260E80000FBFB5 /* PreloadExampleTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3351D260E80000FBFB5 /* PreloadExampleTableViewController.swift */; }; 22 | 59D4B3431D260E80000FBFB5 /* Serializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3361D260E80000FBFB5 /* Serializer.swift */; }; 23 | 59D4B3441D260E80000FBFB5 /* SimpletExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3371D260E80000FBFB5 /* SimpletExampleViewController.swift */; }; 24 | 59D4B3451D260E80000FBFB5 /* UIImageViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D4B3381D260E80000FBFB5 /* UIImageViewExtension.swift */; }; 25 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 26 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 27 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 28 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 29 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 30 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXContainerItemProxy section */ 34 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 39 | remoteInfo = MRTableViewManager; 40 | }; 41 | /* End PBXContainerItemProxy section */ 42 | 43 | /* Begin PBXFileReference section */ 44 | 0B464AA57CAFFA0B666CDE18 /* Pods_MRTableViewManager_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MRTableViewManager_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 191DF43A00C48D92808AF56E /* Pods_MRTableViewManager_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MRTableViewManager_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 249B26F316E9AC90F021ED69 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 47 | 4C3D873FE8F706EFB0F4C789 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 48 | 53230D5FF91A185CE2FCEBDD /* Pods-MRTableViewManager_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MRTableViewManager_Tests.release.xcconfig"; path = "Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.release.xcconfig"; sourceTree = ""; }; 49 | 59D4B32B1D260E80000FBFB5 /* EmptyExampleTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmptyExampleTableViewController.swift; sourceTree = ""; }; 50 | 59D4B32C1D260E80000FBFB5 /* HeaderExampleTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HeaderExampleTableViewController.swift; sourceTree = ""; }; 51 | 59D4B32D1D260E80000FBFB5 /* ImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageLoader.swift; sourceTree = ""; }; 52 | 59D4B32F1D260E80000FBFB5 /* MRContentTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MRContentTableViewCell.swift; sourceTree = ""; }; 53 | 59D4B3301D260E80000FBFB5 /* MRContentTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MRContentTableViewCell.xib; sourceTree = ""; }; 54 | 59D4B3311D260E80000FBFB5 /* MREmptyTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MREmptyTableViewCell.swift; sourceTree = ""; }; 55 | 59D4B3321D260E80000FBFB5 /* MREmptyTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MREmptyTableViewCell.xib; sourceTree = ""; }; 56 | 59D4B3331D260E80000FBFB5 /* MRPreloadTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MRPreloadTableViewCell.swift; sourceTree = ""; }; 57 | 59D4B3341D260E80000FBFB5 /* MRPreloadTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MRPreloadTableViewCell.xib; sourceTree = ""; }; 58 | 59D4B3351D260E80000FBFB5 /* PreloadExampleTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreloadExampleTableViewController.swift; sourceTree = ""; }; 59 | 59D4B3361D260E80000FBFB5 /* Serializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Serializer.swift; sourceTree = ""; }; 60 | 59D4B3371D260E80000FBFB5 /* SimpletExampleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SimpletExampleViewController.swift; sourceTree = ""; }; 61 | 59D4B3381D260E80000FBFB5 /* UIImageViewExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageViewExtension.swift; sourceTree = ""; }; 62 | 607FACD01AFB9204008FA782 /* MRTableViewManager_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MRTableViewManager_Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 65 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 66 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 67 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 68 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 69 | 607FACE51AFB9204008FA782 /* MRTableViewManager_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MRTableViewManager_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 70 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 72 | 68536681C98498F82361745C /* Pods-MRTableViewManager_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MRTableViewManager_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.debug.xcconfig"; sourceTree = ""; }; 73 | 81E4988266B24D7F85961713 /* MRTableViewManager.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = MRTableViewManager.podspec; path = ../MRTableViewManager.podspec; sourceTree = ""; }; 74 | BA5C8F30EC1622BC0700D584 /* Pods-MRTableViewManager_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MRTableViewManager_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.release.xcconfig"; sourceTree = ""; }; 75 | BBB0AF3D4100778D5E042CE3 /* Pods-MRTableViewManager_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MRTableViewManager_Tests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.debug.xcconfig"; sourceTree = ""; }; 76 | /* End PBXFileReference section */ 77 | 78 | /* Begin PBXFrameworksBuildPhase section */ 79 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | 44B6D001B65EAD430107A071 /* Pods_MRTableViewManager_Example.framework in Frameworks */, 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 88 | isa = PBXFrameworksBuildPhase; 89 | buildActionMask = 2147483647; 90 | files = ( 91 | 18D7B2582666518CB58285FD /* Pods_MRTableViewManager_Tests.framework in Frameworks */, 92 | ); 93 | runOnlyForDeploymentPostprocessing = 0; 94 | }; 95 | /* End PBXFrameworksBuildPhase section */ 96 | 97 | /* Begin PBXGroup section */ 98 | 5584E601455F0EB859FAC263 /* Frameworks */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 0B464AA57CAFFA0B666CDE18 /* Pods_MRTableViewManager_Example.framework */, 102 | 191DF43A00C48D92808AF56E /* Pods_MRTableViewManager_Tests.framework */, 103 | ); 104 | name = Frameworks; 105 | sourceTree = ""; 106 | }; 107 | 59D4B32E1D260E80000FBFB5 /* Interfaces */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 59D4B32F1D260E80000FBFB5 /* MRContentTableViewCell.swift */, 111 | 59D4B3301D260E80000FBFB5 /* MRContentTableViewCell.xib */, 112 | 59D4B3311D260E80000FBFB5 /* MREmptyTableViewCell.swift */, 113 | 59D4B3321D260E80000FBFB5 /* MREmptyTableViewCell.xib */, 114 | 59D4B3331D260E80000FBFB5 /* MRPreloadTableViewCell.swift */, 115 | 59D4B3341D260E80000FBFB5 /* MRPreloadTableViewCell.xib */, 116 | ); 117 | path = Interfaces; 118 | sourceTree = ""; 119 | }; 120 | 607FACC71AFB9204008FA782 = { 121 | isa = PBXGroup; 122 | children = ( 123 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 124 | 607FACD21AFB9204008FA782 /* Example for MRTableViewManager */, 125 | 607FACE81AFB9204008FA782 /* Tests */, 126 | 607FACD11AFB9204008FA782 /* Products */, 127 | 8671542AF02B7375E90787B0 /* Pods */, 128 | 5584E601455F0EB859FAC263 /* Frameworks */, 129 | ); 130 | sourceTree = ""; 131 | }; 132 | 607FACD11AFB9204008FA782 /* Products */ = { 133 | isa = PBXGroup; 134 | children = ( 135 | 607FACD01AFB9204008FA782 /* MRTableViewManager_Example.app */, 136 | 607FACE51AFB9204008FA782 /* MRTableViewManager_Tests.xctest */, 137 | ); 138 | name = Products; 139 | sourceTree = ""; 140 | }; 141 | 607FACD21AFB9204008FA782 /* Example for MRTableViewManager */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 59D4B32B1D260E80000FBFB5 /* EmptyExampleTableViewController.swift */, 145 | 59D4B32C1D260E80000FBFB5 /* HeaderExampleTableViewController.swift */, 146 | 59D4B32D1D260E80000FBFB5 /* ImageLoader.swift */, 147 | 59D4B3351D260E80000FBFB5 /* PreloadExampleTableViewController.swift */, 148 | 59D4B3361D260E80000FBFB5 /* Serializer.swift */, 149 | 59D4B3371D260E80000FBFB5 /* SimpletExampleViewController.swift */, 150 | 59D4B3381D260E80000FBFB5 /* UIImageViewExtension.swift */, 151 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 152 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 153 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 154 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 155 | 59D4B32E1D260E80000FBFB5 /* Interfaces */, 156 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 157 | 607FACD31AFB9204008FA782 /* Supporting Files */, 158 | ); 159 | name = "Example for MRTableViewManager"; 160 | path = MRTableViewManager; 161 | sourceTree = ""; 162 | }; 163 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 164 | isa = PBXGroup; 165 | children = ( 166 | 607FACD41AFB9204008FA782 /* Info.plist */, 167 | ); 168 | name = "Supporting Files"; 169 | sourceTree = ""; 170 | }; 171 | 607FACE81AFB9204008FA782 /* Tests */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 175 | 607FACE91AFB9204008FA782 /* Supporting Files */, 176 | ); 177 | path = Tests; 178 | sourceTree = ""; 179 | }; 180 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 181 | isa = PBXGroup; 182 | children = ( 183 | 607FACEA1AFB9204008FA782 /* Info.plist */, 184 | ); 185 | name = "Supporting Files"; 186 | sourceTree = ""; 187 | }; 188 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 189 | isa = PBXGroup; 190 | children = ( 191 | 81E4988266B24D7F85961713 /* MRTableViewManager.podspec */, 192 | 249B26F316E9AC90F021ED69 /* README.md */, 193 | 4C3D873FE8F706EFB0F4C789 /* LICENSE */, 194 | ); 195 | name = "Podspec Metadata"; 196 | sourceTree = ""; 197 | }; 198 | 8671542AF02B7375E90787B0 /* Pods */ = { 199 | isa = PBXGroup; 200 | children = ( 201 | 68536681C98498F82361745C /* Pods-MRTableViewManager_Example.debug.xcconfig */, 202 | BA5C8F30EC1622BC0700D584 /* Pods-MRTableViewManager_Example.release.xcconfig */, 203 | BBB0AF3D4100778D5E042CE3 /* Pods-MRTableViewManager_Tests.debug.xcconfig */, 204 | 53230D5FF91A185CE2FCEBDD /* Pods-MRTableViewManager_Tests.release.xcconfig */, 205 | ); 206 | name = Pods; 207 | sourceTree = ""; 208 | }; 209 | /* End PBXGroup section */ 210 | 211 | /* Begin PBXNativeTarget section */ 212 | 607FACCF1AFB9204008FA782 /* MRTableViewManager_Example */ = { 213 | isa = PBXNativeTarget; 214 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MRTableViewManager_Example" */; 215 | buildPhases = ( 216 | C18092C8B96D3E4EC23FAECA /* [CP] Check Pods Manifest.lock */, 217 | 607FACCC1AFB9204008FA782 /* Sources */, 218 | 607FACCD1AFB9204008FA782 /* Frameworks */, 219 | 607FACCE1AFB9204008FA782 /* Resources */, 220 | 0D22156B75D1A5C6F5243118 /* [CP] Embed Pods Frameworks */, 221 | 0811DF6364D62CD1C2F1223B /* [CP] Copy Pods Resources */, 222 | ); 223 | buildRules = ( 224 | ); 225 | dependencies = ( 226 | ); 227 | name = MRTableViewManager_Example; 228 | productName = MRTableViewManager; 229 | productReference = 607FACD01AFB9204008FA782 /* MRTableViewManager_Example.app */; 230 | productType = "com.apple.product-type.application"; 231 | }; 232 | 607FACE41AFB9204008FA782 /* MRTableViewManager_Tests */ = { 233 | isa = PBXNativeTarget; 234 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MRTableViewManager_Tests" */; 235 | buildPhases = ( 236 | 9F676A0E2D59EC1DB7DA6AB9 /* [CP] Check Pods Manifest.lock */, 237 | 607FACE11AFB9204008FA782 /* Sources */, 238 | 607FACE21AFB9204008FA782 /* Frameworks */, 239 | 607FACE31AFB9204008FA782 /* Resources */, 240 | DA1212E85D70D4E911E47FEC /* [CP] Embed Pods Frameworks */, 241 | 929CA6FFB41B4A044D19B173 /* [CP] Copy Pods Resources */, 242 | ); 243 | buildRules = ( 244 | ); 245 | dependencies = ( 246 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 247 | ); 248 | name = MRTableViewManager_Tests; 249 | productName = Tests; 250 | productReference = 607FACE51AFB9204008FA782 /* MRTableViewManager_Tests.xctest */; 251 | productType = "com.apple.product-type.bundle.unit-test"; 252 | }; 253 | /* End PBXNativeTarget section */ 254 | 255 | /* Begin PBXProject section */ 256 | 607FACC81AFB9204008FA782 /* Project object */ = { 257 | isa = PBXProject; 258 | attributes = { 259 | LastSwiftUpdateCheck = 0720; 260 | LastUpgradeCheck = 0800; 261 | ORGANIZATIONNAME = CocoaPods; 262 | TargetAttributes = { 263 | 607FACCF1AFB9204008FA782 = { 264 | CreatedOnToolsVersion = 6.3.1; 265 | DevelopmentTeam = AV35G7X2KU; 266 | LastSwiftMigration = 0800; 267 | }; 268 | 607FACE41AFB9204008FA782 = { 269 | CreatedOnToolsVersion = 6.3.1; 270 | DevelopmentTeam = AV35G7X2KU; 271 | LastSwiftMigration = 0800; 272 | TestTargetID = 607FACCF1AFB9204008FA782; 273 | }; 274 | }; 275 | }; 276 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "MRTableViewManager" */; 277 | compatibilityVersion = "Xcode 3.2"; 278 | developmentRegion = English; 279 | hasScannedForEncodings = 0; 280 | knownRegions = ( 281 | en, 282 | Base, 283 | ); 284 | mainGroup = 607FACC71AFB9204008FA782; 285 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 286 | projectDirPath = ""; 287 | projectRoot = ""; 288 | targets = ( 289 | 607FACCF1AFB9204008FA782 /* MRTableViewManager_Example */, 290 | 607FACE41AFB9204008FA782 /* MRTableViewManager_Tests */, 291 | ); 292 | }; 293 | /* End PBXProject section */ 294 | 295 | /* Begin PBXResourcesBuildPhase section */ 296 | 607FACCE1AFB9204008FA782 /* Resources */ = { 297 | isa = PBXResourcesBuildPhase; 298 | buildActionMask = 2147483647; 299 | files = ( 300 | 59D4B3411D260E80000FBFB5 /* MRPreloadTableViewCell.xib in Resources */, 301 | 59D4B33D1D260E80000FBFB5 /* MRContentTableViewCell.xib in Resources */, 302 | 59D4B33F1D260E80000FBFB5 /* MREmptyTableViewCell.xib in Resources */, 303 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 304 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 305 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | 607FACE31AFB9204008FA782 /* Resources */ = { 310 | isa = PBXResourcesBuildPhase; 311 | buildActionMask = 2147483647; 312 | files = ( 313 | ); 314 | runOnlyForDeploymentPostprocessing = 0; 315 | }; 316 | /* End PBXResourcesBuildPhase section */ 317 | 318 | /* Begin PBXShellScriptBuildPhase section */ 319 | 0811DF6364D62CD1C2F1223B /* [CP] Copy Pods Resources */ = { 320 | isa = PBXShellScriptBuildPhase; 321 | buildActionMask = 2147483647; 322 | files = ( 323 | ); 324 | inputPaths = ( 325 | ); 326 | name = "[CP] Copy Pods Resources"; 327 | outputPaths = ( 328 | ); 329 | runOnlyForDeploymentPostprocessing = 0; 330 | shellPath = /bin/sh; 331 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-resources.sh\"\n"; 332 | showEnvVarsInLog = 0; 333 | }; 334 | 0D22156B75D1A5C6F5243118 /* [CP] Embed Pods Frameworks */ = { 335 | isa = PBXShellScriptBuildPhase; 336 | buildActionMask = 2147483647; 337 | files = ( 338 | ); 339 | inputPaths = ( 340 | ); 341 | name = "[CP] Embed Pods Frameworks"; 342 | outputPaths = ( 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | shellPath = /bin/sh; 346 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-frameworks.sh\"\n"; 347 | showEnvVarsInLog = 0; 348 | }; 349 | 929CA6FFB41B4A044D19B173 /* [CP] Copy Pods Resources */ = { 350 | isa = PBXShellScriptBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | ); 354 | inputPaths = ( 355 | ); 356 | name = "[CP] Copy Pods Resources"; 357 | outputPaths = ( 358 | ); 359 | runOnlyForDeploymentPostprocessing = 0; 360 | shellPath = /bin/sh; 361 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-resources.sh\"\n"; 362 | showEnvVarsInLog = 0; 363 | }; 364 | 9F676A0E2D59EC1DB7DA6AB9 /* [CP] Check Pods Manifest.lock */ = { 365 | isa = PBXShellScriptBuildPhase; 366 | buildActionMask = 2147483647; 367 | files = ( 368 | ); 369 | inputPaths = ( 370 | ); 371 | name = "[CP] Check Pods Manifest.lock"; 372 | outputPaths = ( 373 | ); 374 | runOnlyForDeploymentPostprocessing = 0; 375 | shellPath = /bin/sh; 376 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 377 | showEnvVarsInLog = 0; 378 | }; 379 | C18092C8B96D3E4EC23FAECA /* [CP] Check Pods Manifest.lock */ = { 380 | isa = PBXShellScriptBuildPhase; 381 | buildActionMask = 2147483647; 382 | files = ( 383 | ); 384 | inputPaths = ( 385 | ); 386 | name = "[CP] Check Pods Manifest.lock"; 387 | outputPaths = ( 388 | ); 389 | runOnlyForDeploymentPostprocessing = 0; 390 | shellPath = /bin/sh; 391 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 392 | showEnvVarsInLog = 0; 393 | }; 394 | DA1212E85D70D4E911E47FEC /* [CP] Embed Pods Frameworks */ = { 395 | isa = PBXShellScriptBuildPhase; 396 | buildActionMask = 2147483647; 397 | files = ( 398 | ); 399 | inputPaths = ( 400 | ); 401 | name = "[CP] Embed Pods Frameworks"; 402 | outputPaths = ( 403 | ); 404 | runOnlyForDeploymentPostprocessing = 0; 405 | shellPath = /bin/sh; 406 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-frameworks.sh\"\n"; 407 | showEnvVarsInLog = 0; 408 | }; 409 | /* End PBXShellScriptBuildPhase section */ 410 | 411 | /* Begin PBXSourcesBuildPhase section */ 412 | 607FACCC1AFB9204008FA782 /* Sources */ = { 413 | isa = PBXSourcesBuildPhase; 414 | buildActionMask = 2147483647; 415 | files = ( 416 | 59D4B3401D260E80000FBFB5 /* MRPreloadTableViewCell.swift in Sources */, 417 | 59D4B33C1D260E80000FBFB5 /* MRContentTableViewCell.swift in Sources */, 418 | 59D4B3451D260E80000FBFB5 /* UIImageViewExtension.swift in Sources */, 419 | 59D4B3391D260E80000FBFB5 /* EmptyExampleTableViewController.swift in Sources */, 420 | 59D4B33A1D260E80000FBFB5 /* HeaderExampleTableViewController.swift in Sources */, 421 | 59D4B33B1D260E80000FBFB5 /* ImageLoader.swift in Sources */, 422 | 59D4B3421D260E80000FBFB5 /* PreloadExampleTableViewController.swift in Sources */, 423 | 59D4B33E1D260E80000FBFB5 /* MREmptyTableViewCell.swift in Sources */, 424 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 425 | 59D4B3441D260E80000FBFB5 /* SimpletExampleViewController.swift in Sources */, 426 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 427 | 59D4B3431D260E80000FBFB5 /* Serializer.swift in Sources */, 428 | ); 429 | runOnlyForDeploymentPostprocessing = 0; 430 | }; 431 | 607FACE11AFB9204008FA782 /* Sources */ = { 432 | isa = PBXSourcesBuildPhase; 433 | buildActionMask = 2147483647; 434 | files = ( 435 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 436 | ); 437 | runOnlyForDeploymentPostprocessing = 0; 438 | }; 439 | /* End PBXSourcesBuildPhase section */ 440 | 441 | /* Begin PBXTargetDependency section */ 442 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 443 | isa = PBXTargetDependency; 444 | target = 607FACCF1AFB9204008FA782 /* MRTableViewManager_Example */; 445 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 446 | }; 447 | /* End PBXTargetDependency section */ 448 | 449 | /* Begin PBXVariantGroup section */ 450 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 451 | isa = PBXVariantGroup; 452 | children = ( 453 | 607FACDA1AFB9204008FA782 /* Base */, 454 | ); 455 | name = Main.storyboard; 456 | sourceTree = ""; 457 | }; 458 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 459 | isa = PBXVariantGroup; 460 | children = ( 461 | 607FACDF1AFB9204008FA782 /* Base */, 462 | ); 463 | name = LaunchScreen.xib; 464 | sourceTree = ""; 465 | }; 466 | /* End PBXVariantGroup section */ 467 | 468 | /* Begin XCBuildConfiguration section */ 469 | 607FACED1AFB9204008FA782 /* Debug */ = { 470 | isa = XCBuildConfiguration; 471 | buildSettings = { 472 | ALWAYS_SEARCH_USER_PATHS = NO; 473 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 474 | CLANG_CXX_LIBRARY = "libc++"; 475 | CLANG_ENABLE_MODULES = YES; 476 | CLANG_ENABLE_OBJC_ARC = YES; 477 | CLANG_WARN_BOOL_CONVERSION = YES; 478 | CLANG_WARN_CONSTANT_CONVERSION = YES; 479 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 480 | CLANG_WARN_EMPTY_BODY = YES; 481 | CLANG_WARN_ENUM_CONVERSION = YES; 482 | CLANG_WARN_INFINITE_RECURSION = YES; 483 | CLANG_WARN_INT_CONVERSION = YES; 484 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 485 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 486 | CLANG_WARN_UNREACHABLE_CODE = YES; 487 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 488 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 489 | COPY_PHASE_STRIP = NO; 490 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 491 | ENABLE_STRICT_OBJC_MSGSEND = YES; 492 | ENABLE_TESTABILITY = YES; 493 | GCC_C_LANGUAGE_STANDARD = gnu99; 494 | GCC_DYNAMIC_NO_PIC = NO; 495 | GCC_NO_COMMON_BLOCKS = YES; 496 | GCC_OPTIMIZATION_LEVEL = 0; 497 | GCC_PREPROCESSOR_DEFINITIONS = ( 498 | "DEBUG=1", 499 | "$(inherited)", 500 | ); 501 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 502 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 503 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 504 | GCC_WARN_UNDECLARED_SELECTOR = YES; 505 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 506 | GCC_WARN_UNUSED_FUNCTION = YES; 507 | GCC_WARN_UNUSED_VARIABLE = YES; 508 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 509 | MTL_ENABLE_DEBUG_INFO = YES; 510 | ONLY_ACTIVE_ARCH = YES; 511 | SDKROOT = iphoneos; 512 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 513 | }; 514 | name = Debug; 515 | }; 516 | 607FACEE1AFB9204008FA782 /* Release */ = { 517 | isa = XCBuildConfiguration; 518 | buildSettings = { 519 | ALWAYS_SEARCH_USER_PATHS = NO; 520 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 521 | CLANG_CXX_LIBRARY = "libc++"; 522 | CLANG_ENABLE_MODULES = YES; 523 | CLANG_ENABLE_OBJC_ARC = YES; 524 | CLANG_WARN_BOOL_CONVERSION = YES; 525 | CLANG_WARN_CONSTANT_CONVERSION = YES; 526 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 527 | CLANG_WARN_EMPTY_BODY = YES; 528 | CLANG_WARN_ENUM_CONVERSION = YES; 529 | CLANG_WARN_INFINITE_RECURSION = YES; 530 | CLANG_WARN_INT_CONVERSION = YES; 531 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 532 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 533 | CLANG_WARN_UNREACHABLE_CODE = YES; 534 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 535 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 536 | COPY_PHASE_STRIP = NO; 537 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 538 | ENABLE_NS_ASSERTIONS = NO; 539 | ENABLE_STRICT_OBJC_MSGSEND = YES; 540 | GCC_C_LANGUAGE_STANDARD = gnu99; 541 | GCC_NO_COMMON_BLOCKS = YES; 542 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 543 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 544 | GCC_WARN_UNDECLARED_SELECTOR = YES; 545 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 546 | GCC_WARN_UNUSED_FUNCTION = YES; 547 | GCC_WARN_UNUSED_VARIABLE = YES; 548 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 549 | MTL_ENABLE_DEBUG_INFO = NO; 550 | SDKROOT = iphoneos; 551 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 552 | VALIDATE_PRODUCT = YES; 553 | }; 554 | name = Release; 555 | }; 556 | 607FACF01AFB9204008FA782 /* Debug */ = { 557 | isa = XCBuildConfiguration; 558 | baseConfigurationReference = 68536681C98498F82361745C /* Pods-MRTableViewManager_Example.debug.xcconfig */; 559 | buildSettings = { 560 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 561 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 562 | DEVELOPMENT_TEAM = AV35G7X2KU; 563 | INFOPLIST_FILE = MRTableViewManager/Info.plist; 564 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 565 | MODULE_NAME = ExampleApp; 566 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 567 | PRODUCT_NAME = "$(TARGET_NAME)"; 568 | SWIFT_VERSION = 3.0; 569 | }; 570 | name = Debug; 571 | }; 572 | 607FACF11AFB9204008FA782 /* Release */ = { 573 | isa = XCBuildConfiguration; 574 | baseConfigurationReference = BA5C8F30EC1622BC0700D584 /* Pods-MRTableViewManager_Example.release.xcconfig */; 575 | buildSettings = { 576 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 577 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 578 | DEVELOPMENT_TEAM = AV35G7X2KU; 579 | INFOPLIST_FILE = MRTableViewManager/Info.plist; 580 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 581 | MODULE_NAME = ExampleApp; 582 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 583 | PRODUCT_NAME = "$(TARGET_NAME)"; 584 | SWIFT_VERSION = 3.0; 585 | }; 586 | name = Release; 587 | }; 588 | 607FACF31AFB9204008FA782 /* Debug */ = { 589 | isa = XCBuildConfiguration; 590 | baseConfigurationReference = BBB0AF3D4100778D5E042CE3 /* Pods-MRTableViewManager_Tests.debug.xcconfig */; 591 | buildSettings = { 592 | DEVELOPMENT_TEAM = AV35G7X2KU; 593 | FRAMEWORK_SEARCH_PATHS = ( 594 | "$(SDKROOT)/Developer/Library/Frameworks", 595 | "$(inherited)", 596 | ); 597 | GCC_PREPROCESSOR_DEFINITIONS = ( 598 | "DEBUG=1", 599 | "$(inherited)", 600 | ); 601 | INFOPLIST_FILE = Tests/Info.plist; 602 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 603 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 604 | PRODUCT_NAME = "$(TARGET_NAME)"; 605 | SWIFT_VERSION = 3.0; 606 | }; 607 | name = Debug; 608 | }; 609 | 607FACF41AFB9204008FA782 /* Release */ = { 610 | isa = XCBuildConfiguration; 611 | baseConfigurationReference = 53230D5FF91A185CE2FCEBDD /* Pods-MRTableViewManager_Tests.release.xcconfig */; 612 | buildSettings = { 613 | DEVELOPMENT_TEAM = AV35G7X2KU; 614 | FRAMEWORK_SEARCH_PATHS = ( 615 | "$(SDKROOT)/Developer/Library/Frameworks", 616 | "$(inherited)", 617 | ); 618 | INFOPLIST_FILE = Tests/Info.plist; 619 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 620 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 621 | PRODUCT_NAME = "$(TARGET_NAME)"; 622 | SWIFT_VERSION = 3.0; 623 | }; 624 | name = Release; 625 | }; 626 | /* End XCBuildConfiguration section */ 627 | 628 | /* Begin XCConfigurationList section */ 629 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "MRTableViewManager" */ = { 630 | isa = XCConfigurationList; 631 | buildConfigurations = ( 632 | 607FACED1AFB9204008FA782 /* Debug */, 633 | 607FACEE1AFB9204008FA782 /* Release */, 634 | ); 635 | defaultConfigurationIsVisible = 0; 636 | defaultConfigurationName = Release; 637 | }; 638 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MRTableViewManager_Example" */ = { 639 | isa = XCConfigurationList; 640 | buildConfigurations = ( 641 | 607FACF01AFB9204008FA782 /* Debug */, 642 | 607FACF11AFB9204008FA782 /* Release */, 643 | ); 644 | defaultConfigurationIsVisible = 0; 645 | defaultConfigurationName = Release; 646 | }; 647 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "MRTableViewManager_Tests" */ = { 648 | isa = XCConfigurationList; 649 | buildConfigurations = ( 650 | 607FACF31AFB9204008FA782 /* Debug */, 651 | 607FACF41AFB9204008FA782 /* Release */, 652 | ); 653 | defaultConfigurationIsVisible = 0; 654 | defaultConfigurationName = Release; 655 | }; 656 | /* End XCConfigurationList section */ 657 | }; 658 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 659 | } 660 | -------------------------------------------------------------------------------- /Example/MRTableViewManager.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/MRTableViewManager.xcodeproj/xcshareddata/xcschemes/MRTableViewManager-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/MRTableViewManager.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 06/30/2016. 6 | // Copyright (c) 2016 Marcelo Reis. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | private func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 33 | 39 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/EmptyExampleTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyExampleTableViewController.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MRTableViewManager 11 | 12 | // MARK: - Life Cycle 13 | final class EmptyExampleTableViewController: UITableViewController { 14 | // MARK: - Attributes 15 | 16 | // Privates 17 | fileprivate let _tableViewManager:TableViewManager = TableViewManager() 18 | 19 | //XIBs 20 | private let MRContentTVC = "MRContentTableViewCell" 21 | private let MREmptyTVC = "MREmptyTableViewCell" 22 | private let MRPreloadTVC = "MRPreloadTableViewCell" 23 | 24 | override func viewDidLoad() { 25 | super.viewDidLoad() 26 | 27 | // TableViewManager Delegate 28 | self._tableViewManager.delegate = self 29 | 30 | //Update tableView data 31 | self._updateTableView() 32 | 33 | // Register XIBs 34 | self.tableView.register(UINib(nibName: self.MRContentTVC, bundle: nil), forCellReuseIdentifier: self.MRContentTVC) 35 | self.tableView.register(UINib(nibName: self.MREmptyTVC, bundle: nil), forCellReuseIdentifier: self.MREmptyTVC) 36 | self.tableView.register(UINib(nibName: self.MRPreloadTVC, bundle: nil), forCellReuseIdentifier: self.MRPreloadTVC) 37 | 38 | //Auto Layout 39 | self.tableView.rowHeight = UITableViewAutomaticDimension 40 | } 41 | 42 | func refreshTableView(){ 43 | self._tableViewManager.clear() 44 | self._updateTableView() 45 | } 46 | 47 | // MARK: - Private functions 48 | fileprivate func _updateTableView(){ 49 | //Add section with a empty feed data 50 | let _ = self._tableViewManager.addSection([] as AnyObject) 51 | } 52 | 53 | override func didReceiveMemoryWarning() { 54 | super.didReceiveMemoryWarning() 55 | // Dispose of any resources that can be recreated. 56 | } 57 | } 58 | 59 | // MARK: - TableViewManager Delegate 60 | extension EmptyExampleTableViewController: TableViewManagerDelegate { 61 | 62 | func getTableView() -> UITableView { 63 | return self.tableView 64 | } 65 | 66 | func next(_ callback: (TableViewManager.Callback)?) { 67 | self._tableViewManager.currentPage += 1 68 | self._updateTableView() 69 | } 70 | } 71 | 72 | // MARK: - UITableViewDataSource, UITableViewDelegate 73 | extension EmptyExampleTableViewController { 74 | override func numberOfSections(in tableView: UITableView) -> Int { 75 | return self._tableViewManager.total() 76 | } 77 | 78 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 79 | return self._tableViewManager.total(section) 80 | } 81 | 82 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 83 | var _cell:TableViewCell 84 | let _sectionType = self._tableViewManager.sectionType(indexPath.section) 85 | 86 | switch _sectionType { 87 | case .empty: 88 | _cell = tableView.dequeueReusableCell(withIdentifier: MREmptyTableViewCell.storyboardId) as! MREmptyTableViewCell 89 | case .preload: 90 | _cell = tableView.dequeueReusableCell(withIdentifier: MRPreloadTableViewCell.storyboardId) as! MRPreloadTableViewCell 91 | case .content: 92 | _cell = tableView.dequeueReusableCell(withIdentifier: MRContentTableViewCell.storyboardId) as! MRContentTableViewCell 93 | case .unknow: 94 | fatalError("Application requested for a non-existent item") 95 | } 96 | 97 | _cell.row = self._tableViewManager.get(indexPath) 98 | _cell.updateViewData() 99 | 100 | return _cell 101 | } 102 | 103 | override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 104 | return 100 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/HeaderExampleTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HeaderExampleTableViewController.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/27/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | import UIKit 9 | import MRTableViewManager 10 | 11 | // MARK: Life Cycle 12 | final class HeaderExampleViewController: UITableViewController { 13 | // MARK: - Attributes 14 | 15 | // Privates 16 | fileprivate let _tableViewManager:TableViewManager = TableViewManager() 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | 21 | // TableViewManager Delegate 22 | self._tableViewManager.delegate = self 23 | 24 | //Update tableView data 25 | self._updateTableView() 26 | } 27 | 28 | func refreshTableView(){ 29 | self._tableViewManager.clear() 30 | self._updateTableView() 31 | } 32 | 33 | // MARK: - Private functions 34 | fileprivate func _updateTableView(){ 35 | //Add section with feed data 36 | Serializer.jsonFromUrl( 37 | url: "https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/master/foobars-header.txt", 38 | completionHandler: { data in 39 | if let _characters: NSDictionary = data["foobars"] as? NSDictionary { 40 | if let _visitors: [[String:AnyObject]] = _characters["visitors"] as? [[String:AnyObject]] { 41 | let _ = self._tableViewManager.addSection(_visitors as AnyObject, tag: "Visitors") 42 | } 43 | if let _warriors: [[String:AnyObject]] = _characters["warriors"] as? [[String:AnyObject]] { 44 | let _ = self._tableViewManager.addSection(_warriors as AnyObject, tag: "Warrios") 45 | } 46 | if let _wizards: [[String:AnyObject]] = _characters["wizards"] as? [[String:AnyObject]] { 47 | let _ = self._tableViewManager.addSection(_wizards as AnyObject, tag: "Wizards") 48 | } 49 | if let _hobbits: [[String:AnyObject]] = _characters["hobbits"] as? [[String:AnyObject]] { 50 | let _ = self._tableViewManager.addSection(_hobbits as AnyObject, tag: "Hobbits") 51 | } 52 | } 53 | 54 | }, 55 | errorHandler: { error in 56 | NSLog("\(error)") 57 | } 58 | ) 59 | } 60 | } 61 | 62 | 63 | // MARK: - TableViewManagerDelegate 64 | extension HeaderExampleViewController: TableViewManagerDelegate { 65 | func getTableView() -> UITableView { 66 | return self.tableView 67 | } 68 | 69 | func next(_ callback: (TableViewManager.Callback)?) { 70 | self._tableViewManager.currentPage += 1 71 | self._updateTableView() 72 | } 73 | } 74 | 75 | // MARK: - UITableViewDataSource, UITableViewDelegate 76 | extension HeaderExampleViewController { 77 | override func numberOfSections(in tableView: UITableView) -> Int { 78 | return self._tableViewManager.total() 79 | } 80 | 81 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 82 | return self._tableViewManager.total(section) 83 | } 84 | 85 | override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 86 | return self._tableViewManager.sectionTag(section); 87 | } 88 | 89 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 90 | let _cell = tableView.dequeueReusableCell(withIdentifier: "labelCell", for: indexPath) 91 | let _foo = self._tableViewManager.get(indexPath as IndexPath) 92 | var _rowContent:String = "" 93 | if let _character = _foo.data["character"] as? String { 94 | _rowContent = "\(_character)" 95 | } 96 | 97 | _cell.textLabel?.text = _rowContent 98 | 99 | return _cell 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/ImageLoader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageExtension.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/27/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | import Foundation 9 | import UIKit 10 | 11 | class ImageLoader { 12 | 13 | var cache = NSCache() 14 | 15 | // Singleton 16 | class var sharedLoader : ImageLoader { 17 | struct Static { 18 | static let instance : ImageLoader = ImageLoader() 19 | } 20 | return Static.instance 21 | } 22 | 23 | // Getting image from url 24 | func imageForUrl(urlString: String, completionHandler: @escaping (_ image: UIImage?) -> ()) { 25 | 26 | DispatchQueue.global().async { 27 | // Checking image on cache 28 | let data: NSData? = self.cache.object(forKey: urlString as AnyObject) as? NSData 29 | if let data = data { 30 | 31 | let image = UIImage(data: data as Data) 32 | 33 | DispatchQueue.main.async(execute: { 34 | completionHandler(image) 35 | return 36 | }) 37 | 38 | } else { 39 | 40 | // Downloading image 41 | let downloadTask: URLSessionDataTask = URLSession.shared.dataTask(with: NSURL(string: urlString)! as URL, completionHandler: { data, response, error in 42 | 43 | if (error != nil) { 44 | completionHandler(nil) 45 | 46 | return 47 | } 48 | 49 | if data != nil { 50 | 51 | let image = UIImage(data: data!) 52 | 53 | // Caching image 54 | self.cache.setObject(data! as AnyObject, forKey: urlString as AnyObject) 55 | 56 | DispatchQueue.main.async(execute: { 57 | completionHandler(image) 58 | 59 | return 60 | }) 61 | } 62 | }) 63 | 64 | downloadTask.resume() 65 | } 66 | } 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "imgPreload.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "imgPreload-2.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "imgPreload-1.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload-1.png -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload-2.png -------------------------------------------------------------------------------- /Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Example/MRTableViewManager/Images.xcassets/imgPreload.imageset/imgPreload.png -------------------------------------------------------------------------------- /Example/MRTableViewManager/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MRContentTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MRContentTableViewCell.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MRTableViewManager 11 | 12 | class MRContentTableViewCell: TableViewCell { 13 | // MARK: - Attribures 14 | 15 | // Statics 16 | static let storyboardId:String = "MRContentTableViewCell" 17 | 18 | // MARK: - Outlets 19 | 20 | //Images 21 | @IBOutlet weak var imgCharacter: UIImageView! 22 | 23 | //Labels 24 | @IBOutlet weak var labelCharacter: UILabel! 25 | @IBOutlet weak var labelActor: UILabel! 26 | @IBOutlet weak var labelBio: UILabel! 27 | 28 | override func awakeFromNib() { 29 | super.awakeFromNib() 30 | 31 | self.labelCharacter.text = "" 32 | self.labelActor.text = "" 33 | self.labelBio.text = "" 34 | self.imgCharacter.image = UIImage() 35 | } 36 | 37 | override func updateViewData() { 38 | if let _character = self.row?.data["character"] as? String { 39 | self.labelCharacter.text = _character 40 | } 41 | if let _actor = self.row?.data["actor"] as? String { 42 | self.labelActor.text = _actor 43 | } 44 | if let _bio = self.row?.data["bio"] as? String { 45 | self.labelBio.text = _bio 46 | } 47 | if let _image = self.row?.data["image"] as? String { 48 | ImageLoader.sharedLoader.imageForUrl(urlString: _image, completionHandler: { loadedImage in 49 | 50 | if loadedImage != nil { 51 | self.imgCharacter.image = loadedImage 52 | self.imgCharacter.fixContent(contentMode: .top) 53 | self.setNeedsLayout() 54 | } 55 | 56 | }) 57 | } 58 | } 59 | 60 | override func setSelected(_ selected: Bool, animated: Bool) { 61 | super.setSelected(selected, animated: animated) 62 | 63 | // Configure the view for the selected state 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MRContentTableViewCell.xib: -------------------------------------------------------------------------------- 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 | 31 | 37 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MREmptyTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MREmptyTableViewCell.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MRTableViewManager 11 | 12 | class MREmptyTableViewCell: TableViewCell { 13 | // MARK: - Attribures 14 | 15 | // Statics 16 | static let storyboardId:String = "MREmptyTableViewCell" 17 | 18 | // MARK: - Outlets 19 | 20 | //Labels 21 | @IBOutlet weak var labelEmpty: UILabel! 22 | 23 | override func awakeFromNib() { 24 | super.awakeFromNib() 25 | 26 | self.labelEmpty.text = "-Nothing to show-" 27 | } 28 | 29 | override func setSelected(_ selected: Bool, animated: Bool) { 30 | super.setSelected(selected, animated: animated) 31 | 32 | // Configure the view for the selected state 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MREmptyTableViewCell.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MRPreloadTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MRPreloadTableViewCell.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MRTableViewManager 11 | 12 | class MRPreloadTableViewCell: TableViewCell { 13 | // MARK: - Attribures 14 | 15 | // Statics 16 | static let storyboardId:String = "MRPreloadTableViewCell" 17 | 18 | override func awakeFromNib() { 19 | super.awakeFromNib() 20 | // Initialization code 21 | } 22 | 23 | override func setSelected(_ selected: Bool, animated: Bool) { 24 | super.setSelected(selected, animated: animated) 25 | 26 | // Configure the view for the selected state 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Interfaces/MRPreloadTableViewCell.xib: -------------------------------------------------------------------------------- 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 | 37 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/PreloadExampleTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SecondExampleTableViewController.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MRTableViewManager 11 | 12 | // MARK: - Life Cycle 13 | final class PreloadExampleTableViewController: UITableViewController { 14 | // MARK: - Attributes 15 | 16 | // Privates 17 | //You can insert how many preload items that you want, but by default is 1 item 18 | fileprivate let _tableViewManager:TableViewManager = TableViewManager(preloadItems: 3) 19 | 20 | //XIBs 21 | fileprivate let MRContentTVC = "MRContentTableViewCell" 22 | fileprivate let MREmptyTVC = "MREmptyTableViewCell" 23 | fileprivate let MRPreloadTVC = "MRPreloadTableViewCell" 24 | 25 | override func viewDidLoad() { 26 | super.viewDidLoad() 27 | 28 | // TableViewManager Delegate 29 | self._tableViewManager.delegate = self 30 | 31 | //Update tableView data 32 | self._updateTableView() 33 | 34 | // Register XIBs 35 | //Here, you can asign NIBs made by yourself, just alter this lines above 36 | self.tableView.register(UINib(nibName: self.MRContentTVC, bundle: nil), forCellReuseIdentifier: self.MRContentTVC) 37 | self.tableView.register(UINib(nibName: self.MREmptyTVC, bundle: nil), forCellReuseIdentifier: self.MREmptyTVC) 38 | self.tableView.register(UINib(nibName: self.MRPreloadTVC, bundle: nil), forCellReuseIdentifier: self.MRPreloadTVC) 39 | 40 | //Auto Layout 41 | self.tableView.rowHeight = UITableViewAutomaticDimension 42 | } 43 | 44 | func refreshTableView(){ 45 | self._tableViewManager.clear() 46 | self._updateTableView() 47 | } 48 | 49 | // MARK: - Private functions 50 | fileprivate func _updateTableView(){ 51 | //Add section with feed data 52 | Serializer.jsonFromUrl( 53 | url: "https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/master/foobars.txt", 54 | completionHandler: { data in 55 | 56 | // I put this sleep to force the preload appear in tableview 57 | sleep(3) 58 | 59 | if let _characters: [[String:AnyObject]] = data["foobars"] as? [[String:AnyObject]] { 60 | let _ = self._tableViewManager.addSection(_characters as AnyObject) 61 | } 62 | }, 63 | errorHandler: { error in 64 | NSLog("\(error)") 65 | } 66 | ) 67 | } 68 | 69 | override func didReceiveMemoryWarning() { 70 | super.didReceiveMemoryWarning() 71 | // Dispose of any resources that can be recreated. 72 | } 73 | 74 | } 75 | 76 | // MARK: - TableViewManagerDelegate 77 | extension PreloadExampleTableViewController: TableViewManagerDelegate { 78 | func getTableView() -> UITableView { 79 | return self.tableView 80 | } 81 | 82 | func next(_ callback: (TableViewManager.Callback)?) { 83 | self._tableViewManager.currentPage += 1 84 | self._updateTableView() 85 | } 86 | } 87 | 88 | // MARK: - UITableViewDataSource, UITableViewDelegate 89 | extension PreloadExampleTableViewController { 90 | override func numberOfSections(in tableView: UITableView) -> Int { 91 | return self._tableViewManager.total() 92 | } 93 | 94 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 95 | return self._tableViewManager.total(section) 96 | } 97 | 98 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 99 | var _cell:TableViewCell 100 | let _sectionType = self._tableViewManager.sectionType(indexPath.section) 101 | 102 | switch _sectionType { 103 | case .empty: 104 | _cell = tableView.dequeueReusableCell(withIdentifier: MREmptyTableViewCell.storyboardId) as! MREmptyTableViewCell 105 | case .preload: 106 | _cell = tableView.dequeueReusableCell(withIdentifier: MRPreloadTableViewCell.storyboardId) as! MRPreloadTableViewCell 107 | case .content: 108 | _cell = tableView.dequeueReusableCell(withIdentifier: MRContentTableViewCell.storyboardId) as! MRContentTableViewCell 109 | case .unknow: 110 | fatalError("Application requested for a non-existent item") 111 | } 112 | 113 | _cell.row = self._tableViewManager.get(indexPath) 114 | _cell.updateViewData() 115 | 116 | return _cell 117 | } 118 | 119 | override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 120 | return 100 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/Serializer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Serializer.swift 3 | // TableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/22/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // JSON Serializer helper class 12 | final class Serializer { 13 | 14 | // Retrieve JSON from Url and tries to parse it 15 | static func jsonFromUrl(url: String, completionHandler: @escaping (NSDictionary) -> (), errorHandler: @escaping (NSError?) -> ()) { 16 | 17 | let url = NSURL(string: url) 18 | 19 | let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) in 20 | 21 | if error != nil { 22 | errorHandler(error as NSError?) 23 | } else { 24 | let result = NSString(data: data!, encoding: String.Encoding.utf8.rawValue) 25 | completionHandler(Serializer.jsonFromString(json: result!)) 26 | } 27 | 28 | } 29 | 30 | task.resume() 31 | } 32 | 33 | // Convert JSON string to NSDictionary 34 | static func jsonFromString(json: NSString) -> NSDictionary { 35 | 36 | // convert String to NSData 37 | let data = json.data(using: String.Encoding.utf8.rawValue) 38 | var error: NSError? 39 | 40 | // convert NSData to 'AnyObject' 41 | let anyObj: Any? 42 | 43 | do { 44 | 45 | anyObj = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 46 | 47 | } catch let error1 as NSError { 48 | 49 | error = error1 50 | anyObj = nil 51 | 52 | } 53 | 54 | if(error != nil) { 55 | 56 | print("JSON Error \(error!.localizedDescription)") 57 | return NSDictionary() 58 | 59 | } else { 60 | 61 | return anyObj as! NSDictionary 62 | } 63 | 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/SimpletExampleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 06/25/2016. 6 | // Copyright (c) 2016 Marcelo Reis. All rights reserved. 7 | // 8 | import UIKit 9 | import MRTableViewManager 10 | 11 | // MARK: - Life Cycle 12 | final class SimpleExampleViewController: UITableViewController { 13 | // MARK: - Attributes 14 | 15 | // Privates 16 | fileprivate let _tableViewManager:TableViewManager = TableViewManager() 17 | 18 | // MARK: - Life Cycle 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | 22 | // TableViewManager Delegate 23 | self._tableViewManager.delegate = self 24 | 25 | //Update tableView data 26 | self._updateTableView() 27 | } 28 | 29 | func refreshTableView(){ 30 | self._tableViewManager.clear() 31 | self._updateTableView() 32 | } 33 | 34 | // MARK: - Private functions 35 | fileprivate func _updateTableView(){ 36 | //Add section with feed data 37 | Serializer.jsonFromUrl( 38 | url: "https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/master/foobars.txt", 39 | completionHandler: { data in 40 | if let _characters: [[String:AnyObject]] = data["foobars"] as? [[String:AnyObject]] { 41 | let _ = self._tableViewManager.addSection(_characters as AnyObject) 42 | } 43 | }, 44 | errorHandler: { error in 45 | NSLog("\(error)") 46 | } 47 | ) 48 | } 49 | } 50 | 51 | // MARK: TableViewManagerDelegate 52 | extension SimpleExampleViewController: TableViewManagerDelegate { 53 | func getTableView() -> UITableView { 54 | return self.tableView 55 | } 56 | 57 | func next(_ callback: (TableViewManager.Callback)?) { 58 | self._tableViewManager.currentPage += 1 59 | self._updateTableView() 60 | } 61 | } 62 | 63 | // MARK: - UITableViewDataSource, UITableViewDelegate 64 | extension SimpleExampleViewController { 65 | override func numberOfSections(in tableView: UITableView) -> Int { 66 | return self._tableViewManager.total() 67 | } 68 | 69 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 70 | return self._tableViewManager.total(section) 71 | } 72 | 73 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 74 | let _cell = tableView.dequeueReusableCell(withIdentifier: "labelCell", for: indexPath) 75 | let _foo = self._tableViewManager.get(indexPath) 76 | var _rowContent:String = "" 77 | if let _character = _foo.data["character"] as? String { 78 | _rowContent = "\(_character)" 79 | } 80 | 81 | _cell.textLabel?.text = _rowContent 82 | 83 | return _cell 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/UIImageViewExtension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageViewExtension.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/27/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | import Foundation 9 | import UIKit 10 | 11 | extension UIImageView { 12 | 13 | // Fit image height or width 14 | func fixContent(contentMode:UIViewContentMode = .scaleAspectFill) { 15 | 16 | self.clipsToBounds = true 17 | self.contentMode = contentMode 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /Example/MRTableViewManager/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // MRTableViewManager 4 | // 5 | // Created by Marcelo Reis on 6/25/16. 6 | // Copyright © 2016 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | final class ViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'MRTableViewManager_Example' do 4 | pod 'MRTableViewManager', :path => '../' 5 | 6 | target 'MRTableViewManager_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MRTableViewManager (0.1.3) 3 | 4 | DEPENDENCIES: 5 | - MRTableViewManager (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | MRTableViewManager: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | MRTableViewManager: b352ccdc104464bdb87b002857a9d56f49b132d0 13 | 14 | PODFILE CHECKSUM: 32ab4d951bd3886498d12ac059a5a70920ad4334 15 | 16 | COCOAPODS: 1.0.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/MRTableViewManager.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "MRTableViewManager", 3 | "version": "0.1.3", 4 | "summary": "MRTableViewManager is a nice lib.", 5 | "description": "This is a lib to help handle tableviewcontrollers and viewcellcontrollers", 6 | "homepage": "https://github.com/marceloreis13/MRTableViewManager", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Marcelo Reis": "marcello@marcelloreis.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/marceloreis13/MRTableViewManager.git", 16 | "tag": "0.1.3" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "MRTableViewManager/Classes/**/*" 22 | } 23 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MRTableViewManager (0.1.3) 3 | 4 | DEPENDENCIES: 5 | - MRTableViewManager (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | MRTableViewManager: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | MRTableViewManager: b352ccdc104464bdb87b002857a9d56f49b132d0 13 | 14 | PODFILE CHECKSUM: 32ab4d951bd3886498d12ac059a5a70920ad4334 15 | 16 | COCOAPODS: 1.0.1 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/MRTableViewManager-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MRTableViewManager : NSObject 3 | @end 4 | @implementation PodsDummy_MRTableViewManager 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/MRTableViewManager-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/MRTableViewManager-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double MRTableViewManagerVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char MRTableViewManagerVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/MRTableViewManager.modulemap: -------------------------------------------------------------------------------- 1 | framework module MRTableViewManager { 2 | umbrella header "MRTableViewManager-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/MRTableViewManager/MRTableViewManager.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## MRTableViewManager 5 | 6 | Copyright (c) 2016 Marcelo Reis 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2016 Marcelo Reis <marcello@marcelloreis.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | Title 38 | MRTableViewManager 39 | Type 40 | PSGroupSpecifier 41 | 42 | 43 | FooterText 44 | Generated by CocoaPods - https://cocoapods.org 45 | Title 46 | 47 | Type 48 | PSGroupSpecifier 49 | 50 | 51 | StringsTable 52 | Acknowledgements 53 | Title 54 | Acknowledgements 55 | 56 | 57 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MRTableViewManager_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MRTableViewManager_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/MRTableViewManager/MRTableViewManager.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "$BUILT_PRODUCTS_DIR/MRTableViewManager/MRTableViewManager.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_MRTableViewManager_ExampleVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_MRTableViewManager_ExampleVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager/MRTableViewManager.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "MRTableViewManager" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_MRTableViewManager_Example { 2 | umbrella header "Pods-MRTableViewManager_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager/MRTableViewManager.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "MRTableViewManager" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_MRTableViewManager_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_MRTableViewManager_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_MRTableViewManager_TestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_MRTableViewManager_TestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager/MRTableViewManager.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_MRTableViewManager_Tests { 2 | umbrella header "Pods-MRTableViewManager_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/MRTableViewManager/MRTableViewManager.framework/Headers" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT}/Pods 8 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import XCTest 3 | import MRTableViewManager 4 | 5 | class Tests: XCTestCase { 6 | 7 | override func setUp() { 8 | super.setUp() 9 | // Put setup code here. This method is called before the invocation of each test method in the class. 10 | } 11 | 12 | override func tearDown() { 13 | // Put teardown code here. This method is called after the invocation of each test method in the class. 14 | super.tearDown() 15 | } 16 | 17 | func testExample() { 18 | // This is an example of a functional test case. 19 | XCTAssert(true, "Pass") 20 | } 21 | 22 | func testPerformanceExample() { 23 | // This is an example of a performance test case. 24 | self.measure() { 25 | // Put the code you want to measure the time of here. 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /Images/gif-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Images/gif-1.gif -------------------------------------------------------------------------------- /Images/gif-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Images/gif-2.gif -------------------------------------------------------------------------------- /Images/gif-3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Images/gif-3.gif -------------------------------------------------------------------------------- /Images/gif-4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/Images/gif-4.gif -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016 Marcelo Reis 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /MRTableViewManager.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint MRTableViewManager.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'MRTableViewManager' 11 | s.version = '2.0.2' 12 | s.summary = 'MRTableViewManager is a nice lib.' 13 | 14 | # This description is used to generate tags and improve search results. 15 | # * Think: What does it do? Why did you write it? What is the focus? 16 | # * Try to keep it short, snappy and to the point. 17 | # * Write the description between the DESC delimiters below. 18 | # * Finally, don't worry about the indent, CocoaPods strips it! 19 | 20 | s.description = <<-DESC 21 | This is a lib to help handle tableviewcontrollers and viewcellcontrollers 22 | DESC 23 | 24 | s.homepage = 'https://github.com/marceloreis13/MRTableViewManager' 25 | # s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2' 26 | s.license = { :type => 'MIT', :file => 'LICENSE' } 27 | s.author = { 'Marcelo Reis' => 'marcello@marcelloreis.com' } 28 | s.source = { :git => 'https://github.com/marceloreis13/MRTableViewManager.git', :commit => "6967fd030cff282cce95449e0bb262e71e367d67" } 29 | # s.social_media_url = 'https://twitter.com/' 30 | 31 | s.ios.deployment_target = '8.0' 32 | 33 | s.source_files = 'MRTableViewManager/Classes/**/*' 34 | 35 | # s.resource_bundles = { 36 | # 'MRTableViewManager' => ['MRTableViewManager/Assets/*.png'] 37 | # } 38 | 39 | # s.public_header_files = 'Pod/Classes/**/*.h' 40 | # s.frameworks = 'UIKit', 'MapKit' 41 | # s.dependency 'AFNetworking', '~> 2.3' 42 | end 43 | -------------------------------------------------------------------------------- /MRTableViewManager/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/MRTableViewManager/Assets/.gitkeep -------------------------------------------------------------------------------- /MRTableViewManager/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/marceloreis13/MRTableViewManager/ca9c6746dea1ecffa07d925604b0aa63dd08d6ab/MRTableViewManager/Classes/.gitkeep -------------------------------------------------------------------------------- /MRTableViewManager/Classes/TableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TableViewCell.swift 3 | // Pods 4 | // 5 | // Created by Marcelo Reis on 6/21/16. 6 | // 7 | // 8 | 9 | import UIKit 10 | 11 | public protocol TableViewCellDelegate { 12 | // func deleteRow(indexPath: NSIndexPath) 13 | } 14 | 15 | open class TableViewCell: UITableViewCell { 16 | open var row: TableViewRow? 17 | open var indexPath: IndexPath? 18 | open var delegate: TableViewCellDelegate? 19 | 20 | required public init?(coder aDecoder: NSCoder) { 21 | super.init(coder: aDecoder) 22 | } 23 | 24 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 25 | super.init(style: style, reuseIdentifier: reuseIdentifier) 26 | } 27 | 28 | open func updateViewData() {} 29 | 30 | override open func prepareForReuse() { 31 | super.prepareForReuse() 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /MRTableViewManager/Classes/TableViewManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TableViewManager.swift 3 | // Pods 4 | // 5 | // Created by Marcelo Reis on 6/21/16. 6 | // 7 | // 8 | 9 | import UIKit 10 | 11 | // MARK: Table View Manager Delegate 12 | public protocol TableViewManagerDelegate { 13 | // Attributes 14 | func next(_ callback: (TableViewManager.Callback)?) 15 | func getTableView() -> UITableView 16 | } 17 | 18 | // MARK: TableViewRowManager Class 19 | open class TableViewManager { 20 | // MARK: - Type Alias 21 | public typealias Callback = () -> () 22 | public typealias SectionType = TableViewSection.SectionType 23 | 24 | // MARK: - Private Atributtes 25 | fileprivate var _sections: [TableViewSection] 26 | fileprivate var _preloadItems: Int 27 | 28 | // MARK: - Public Atributtes 29 | open var delegate: TableViewManagerDelegate? 30 | open var tableViewManager: UITableView? 31 | open var currentPage: Int = 1 32 | 33 | // MARK: - Init 34 | public init(preloadItems: Int = 1){ 35 | //Start _sections 36 | self._sections = [TableViewSection]() 37 | 38 | //Set how many preloads will be showed 39 | self._preloadItems = preloadItems 40 | 41 | //Action preload 42 | self.addPreload() 43 | } 44 | 45 | 46 | // MARK: - Private functions 47 | fileprivate func _tableViewReloadData() { 48 | //Reload table view data after fill section 49 | if let _tableView = self.delegate?.getTableView() { 50 | DispatchQueue.main.async(execute: { 51 | _tableView.reloadData() 52 | }) 53 | } 54 | } 55 | 56 | fileprivate func _processRowsData(_ data: AnyObject?) -> [TableViewRow] { 57 | guard data != nil else { return [] } 58 | 59 | // Rows map 60 | var _rows: [TableViewRow] = [] 61 | 62 | //Loop with data received 63 | if let _data = data as? [AnyObject] { 64 | for item in _data { 65 | _rows.append(TableViewRow(data: item)) 66 | } 67 | } 68 | 69 | return _rows 70 | } 71 | 72 | fileprivate func _addSection(_ data: AnyObject?, tag: String = "", type: SectionType = .unknow) -> TableViewSection { 73 | //Remove preload before add any section 74 | self._removePreload() 75 | 76 | //Remove empties before add any section 77 | self._removeEmpty() 78 | 79 | var _rows = self._processRowsData(data) 80 | var _type = type 81 | 82 | if _rows.isEmpty { 83 | _rows = self._processRowsData(nil) 84 | _type = .empty 85 | } 86 | 87 | let _section: TableViewSection = TableViewSection(rows: _rows, tag: tag, type: _type) 88 | self._sections.append(_section) 89 | 90 | //Reload table view data after fill section 91 | self._tableViewReloadData() 92 | 93 | return _section 94 | } 95 | 96 | //Remove preload 97 | fileprivate func _removePreload() { 98 | guard self._preloadItems > 0 else {return} 99 | guard self._sections.first != nil else {return} 100 | 101 | if self._sections.first!.type == .preload { 102 | self._sections.removeFirst() 103 | } 104 | 105 | } 106 | 107 | //Remove empties 108 | fileprivate func _removeEmpty() { 109 | guard self._sections.last != nil else {return} 110 | 111 | if self._sections.last!.type == .empty { 112 | self._sections.removeLast() 113 | } 114 | } 115 | 116 | // MARK: - Public functions 117 | 118 | open func addSection(_ data: AnyObject, tag: String = "") -> TableViewSection { 119 | let _section = self._addSection(data, tag: tag, type: .content) 120 | 121 | return _section 122 | } 123 | 124 | open func addSectionScrollingToEnd(_ data: AnyObject, tag: String = "") { 125 | //Add Section 126 | let _section = self.addSection(data, tag: tag) 127 | 128 | //Scrolling to end 129 | let _rowEndIndex = _section.rows.endIndex - 1 130 | let _sectionEndIndex = self._sections.endIndex - 1 131 | let indexPath = IndexPath(row: _rowEndIndex, section: _sectionEndIndex) 132 | if let _tableView = self.delegate?.getTableView() { 133 | _tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.middle, animated: true) 134 | }else{ 135 | print("Missing tableViewManager") 136 | } 137 | } 138 | 139 | // Fill the _section with preload data 140 | open func addPreload() { 141 | guard self._preloadItems > 0 else { return } 142 | 143 | self.clear() 144 | 145 | var _rows = [TableViewRow]() 146 | for _ in 1...self._preloadItems { 147 | _rows.append(TableViewRow()) 148 | } 149 | 150 | let _section: TableViewSection = TableViewSection(rows: _rows, tag: "preload", type: .preload) 151 | 152 | self._sections.append(_section) 153 | 154 | //Reload table view data after fill section 155 | self._tableViewReloadData() 156 | } 157 | 158 | open func clear() { 159 | guard !self._sections.isEmpty else {return} 160 | 161 | self.currentPage = 1 162 | 163 | self._sections = [TableViewSection]() 164 | } 165 | 166 | open func clearKeepingFirst() { 167 | guard !self._sections.isEmpty else {return} 168 | guard self._sections.count >= 1 else {return} 169 | 170 | let _firstSection = self._sections.first 171 | self.clear() 172 | self._sections.append(_firstSection!) 173 | } 174 | 175 | open func sectionType(_ section: Int) -> SectionType { 176 | guard !self._sections.isEmpty else {return SectionType.unknow} 177 | 178 | return self._sections[section].type 179 | } 180 | 181 | open func sectionTag(_ section: Int) -> String { 182 | guard !self._sections.isEmpty else {return ""} 183 | 184 | return self._sections[section].tag 185 | } 186 | 187 | open func get(_ indexPath: IndexPath) -> TableViewRow { 188 | guard !self._sections.isEmpty && !self._sections[(indexPath as NSIndexPath).section].rows.isEmpty else { return TableViewRow() } 189 | 190 | return self._sections[(indexPath as NSIndexPath).section].rows[(indexPath as NSIndexPath).row] 191 | } 192 | 193 | open func remove(_ indexPath: IndexPath) { 194 | guard !self._sections.isEmpty && !self._sections[(indexPath as NSIndexPath).section].rows.isEmpty else {return} 195 | 196 | self._sections[(indexPath as NSIndexPath).section].rows.remove(at: (indexPath as NSIndexPath).row) 197 | } 198 | 199 | //Total of sections 200 | open func total() -> Int { 201 | return self._sections.count 202 | } 203 | 204 | //Total of rows in specific section 205 | open func total(_ section: Int) -> Int { 206 | guard self._sections[section].type != SectionType.empty else { 207 | return 1 208 | } 209 | 210 | return self._sections[section].rows.count 211 | } 212 | 213 | } 214 | -------------------------------------------------------------------------------- /MRTableViewManager/Classes/TableViewRow.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TableViewRow.swift 3 | // Pods 4 | // 5 | // Created by Marcelo Reis on 6/21/16. 6 | // 7 | // 8 | 9 | // MARK: - TVRow Class 10 | open class TableViewRow { 11 | // MARK: Proprieties 12 | open let data: AnyObject 13 | 14 | // MARK: Init 15 | public init(data: AnyObject){ 16 | self.data = data 17 | } 18 | 19 | public init(){ 20 | self.data = [AnyObject]() as AnyObject 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /MRTableViewManager/Classes/TableViewSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TableViewSection.swift 3 | // Pods 4 | // 5 | // Created by Marcelo Reis on 6/21/16. 6 | // 7 | // 8 | 9 | // MARK: - TableViewSection Class 10 | open class TableViewSection { 11 | // MARK: Enums and Structs 12 | 13 | //Definition of row types 14 | public enum SectionType:Int { 15 | case unknow 16 | case empty 17 | case preload 18 | case content 19 | } 20 | 21 | // MARK: - Proprieties 22 | var rows: [TableViewRow] 23 | var tag: String 24 | var type: SectionType 25 | 26 | // MARK: - Init 27 | init(rows: [TableViewRow] = [], tag: String = "", type: SectionType = .unknow){ 28 | self.rows = rows 29 | self.tag = tag 30 | self.type = type 31 | } 32 | 33 | func add(_ row: TableViewRow) { 34 | self.rows.append(row) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Table View Manager 2 | 3 | With few codes, you can build a complete table view with pagination, preload cells and empty data retrieved from API. 4 | 5 | [![CI Status](http://img.shields.io/travis/Marcelo Reis/MRTableViewManager.svg?style=flat)](https://travis-ci.org/Marcelo Reis/MRTableViewManager) 6 | [![Version](https://img.shields.io/cocoapods/v/MRTableViewManager.svg?style=flat)](http://cocoapods.org/pods/MRTableViewManager) 7 | [![License](https://img.shields.io/cocoapods/l/MRTableViewManager.svg?style=flat)](http://cocoapods.org/pods/MRTableViewManager) 8 | [![Platform](https://img.shields.io/cocoapods/p/MRTableViewManager.svg?style=flat)](http://cocoapods.org/pods/MRTableViewManager) 9 | 10 | **Preload** | **Simple** | 11 | :--:|:--:| 12 | ![Preload](Images/gif-2.gif "Preload") | ![Simple](Images/gif-1.gif "Simple") | 13 | **Headers** | **Empty** | 14 | ![Headers](Images/gif-4.gif "Headers") | ![Empty](Images/gif-3.gif "Empty") | 15 | 16 | ## Example 17 | 18 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 19 | 20 | ## Requirements and Details 21 | 22 | * iOS 8.0+ 23 | * Xcode 7.3 or above 24 | * Built with Swift 2.2 25 | 26 | 27 | ## Installation 28 | 29 | ### CocoaPods 30 | 31 | ```ruby 32 | source 'https://github.com/CocoaPods/Specs.git' 33 | platform :ios, '8.0' 34 | 35 | target 'Your Project Name' do 36 | use_frameworks! 37 | // ... 38 | pod 'MRTableViewManager', '~> 0.1.2' 39 | // ... 40 | end 41 | ``` 42 | 43 | ### Manually 44 | 45 | Although it's not recommended, you just need to drop MRTableViewManager folder into Xcode project (make sure to enable "Copy items if needed" and "Create groups"). 46 | 47 | ## Usage 48 | 49 | #### Instatiating 50 | ```swift 51 | import MRTableViewManager 52 | 53 | class PreloadExampleTableViewController: UITableViewController, TableViewManagerDelegate { 54 | // ... 55 | 56 | let tableViewManager = MRTableViewManager() 57 | ``` 58 | 59 | ## Information and Contact 60 | 61 | Developed by [@marceloreis13](https://github.com/marceloreis13). 62 | 63 | Contact me either by Linkedin [@marceloreis13](https://www.linkedin.com/in/marceloreis13) or emailing me to [me@marcelo.cc](mailto:me@marcelo.cc). 64 | 65 | ## License 66 | The MIT License (MIT) 67 | Copyright (c) 2016 Marcelo Reis 68 | 69 | Permission is hereby granted, free of charge, to any person obtaining a copy 70 | of this software and associated documentation files (the "Software"), to deal 71 | in the Software without restriction, including without limitation the rights 72 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 73 | copies of the Software, and to permit persons to whom the Software is 74 | furnished to do so, subject to the following conditions: 75 | 76 | The above copyright notice and this permission notice shall be included in 77 | all copies or substantial portions of the Software. 78 | 79 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 80 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 81 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 82 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 83 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 84 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 85 | THE SOFTWARE. -------------------------------------------------------------------------------- /_pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 130EBC4BA40A1595587D77164F0E4034 /* MRTableViewManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A6A92302DFE0C1230F98AA56C66411D7 /* MRTableViewManager-dummy.m */; }; 11 | 1324F8BDA576596D5F22EE0B6F9F368C /* Pods-MRTableViewManager_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 408BB34056F24AFE6D289DBB61A26D3D /* Pods-MRTableViewManager_Example-dummy.m */; }; 12 | 215ABA28C705B9F75C95BD33C8D73633 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; 13 | 37E5F52D9EEC1B00DF95B18BE11744A9 /* Pods-MRTableViewManager_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DB72939E207048C4212874B2492E1A07 /* Pods-MRTableViewManager_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 50BB2F2029B3566D401276F3F71B42EB /* TableViewManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EAC0BFE9BC731FB86F7B112827D2E6E /* TableViewManager.swift */; }; 15 | 5D571251D509D0344E5580535F192CB0 /* TableViewSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6893089870F817AB258EA98CEF9BAB15 /* TableViewSection.swift */; }; 16 | 7FA9DCDE53B00F675D628C5729079F0D /* Pods-MRTableViewManager_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7451DDC8809F45E3E9C91694FBC7A074 /* Pods-MRTableViewManager_Tests-dummy.m */; }; 17 | 9AFA8AA2518A7CC599438C7F3A3A6545 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; 18 | CFEA5A2F653A8F9FC5814D8E0BBEC5A4 /* MRTableViewManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D9DBE90541D39689AD1E40E062C38DED /* MRTableViewManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 19 | D79780A9E4F0F5D51F6B6A5069DBDD3D /* TableViewRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F319B74BC69E046D4A620023F5B748F6 /* TableViewRow.swift */; }; 20 | D8875138C850FC9E856A51E5232853D9 /* TableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39013D4445BF989624F6EB3631BFFED /* TableViewCell.swift */; }; 21 | F8C0DE154158C1F8A446E2C266D2FA26 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */; }; 22 | F932CE5129F30CE8AEF355C0B5F8023D /* Pods-MRTableViewManager_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D9FF9056A5D70045D71D10B44641504D /* Pods-MRTableViewManager_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | /* End PBXBuildFile section */ 24 | 25 | /* Begin PBXContainerItemProxy section */ 26 | D9B0767764DF9E76AF2EBA70D80CC1A1 /* PBXContainerItemProxy */ = { 27 | isa = PBXContainerItemProxy; 28 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 29 | proxyType = 1; 30 | remoteGlobalIDString = C2AF159853D9AC889C4CDDE76DE38325; 31 | remoteInfo = MRTableViewManager; 32 | }; 33 | /* End PBXContainerItemProxy section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 040F920C8FE1A669DA1A78764182FA70 /* Pods-MRTableViewManager_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MRTableViewManager_Tests-acknowledgements.markdown"; sourceTree = ""; }; 37 | 0EAC0BFE9BC731FB86F7B112827D2E6E /* TableViewManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TableViewManager.swift; sourceTree = ""; }; 38 | 0ECAD313411C2745FC6ADBD7D6D8A8D8 /* Pods-MRTableViewManager_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MRTableViewManager_Example-acknowledgements.plist"; sourceTree = ""; }; 39 | 14398E378E4257DA317549FA82C878C9 /* MRTableViewManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MRTableViewManager-prefix.pch"; sourceTree = ""; }; 40 | 1A3489923C1AB6A12DEBC5FCA475E7CB /* Pods-MRTableViewManager_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MRTableViewManager_Tests.debug.xcconfig"; sourceTree = ""; }; 41 | 1D4B7001EA6200F8CFC1FCBE9F681296 /* MRTableViewManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = MRTableViewManager.modulemap; sourceTree = ""; }; 42 | 3291ECC633348A3AB70DC005D917179A /* Pods-MRTableViewManager_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MRTableViewManager_Tests-frameworks.sh"; sourceTree = ""; }; 43 | 3ABB8190C4A331CB5FEE48EE712645AA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | 3BC2502F1ED8690B89677E8202134D5C /* Pods_MRTableViewManager_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MRTableViewManager_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 403B390004FC8D2B9659826173F4C05B /* Pods_MRTableViewManager_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MRTableViewManager_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | 408BB34056F24AFE6D289DBB61A26D3D /* Pods-MRTableViewManager_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MRTableViewManager_Example-dummy.m"; sourceTree = ""; }; 47 | 541812013421F75676E091964322B13F /* Pods-MRTableViewManager_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MRTableViewManager_Example.release.xcconfig"; sourceTree = ""; }; 48 | 64CEC2621624F9925DDCD8C96F44A16D /* Pods-MRTableViewManager_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MRTableViewManager_Tests-acknowledgements.plist"; sourceTree = ""; }; 49 | 6893089870F817AB258EA98CEF9BAB15 /* TableViewSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TableViewSection.swift; sourceTree = ""; }; 50 | 6D12109311ECE1897671F31D2C4B516C /* MRTableViewManager.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MRTableViewManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 51 | 6DECE4B86DD8C16842E1BD16B9BBB6E7 /* Pods-MRTableViewManager_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MRTableViewManager_Tests.release.xcconfig"; sourceTree = ""; }; 52 | 7451DDC8809F45E3E9C91694FBC7A074 /* Pods-MRTableViewManager_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MRTableViewManager_Tests-dummy.m"; sourceTree = ""; }; 53 | 754D1419BABF81DC8497641AD995D4D6 /* Pods-MRTableViewManager_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MRTableViewManager_Example.debug.xcconfig"; sourceTree = ""; }; 54 | 7DA92ACE58D30EA5A68DEF57B737D670 /* Pods-MRTableViewManager_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MRTableViewManager_Tests.modulemap"; sourceTree = ""; }; 55 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 56 | A13B8CF4B15FA892B40330FA345B13B9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 57 | A6A92302DFE0C1230F98AA56C66411D7 /* MRTableViewManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MRTableViewManager-dummy.m"; sourceTree = ""; }; 58 | B39013D4445BF989624F6EB3631BFFED /* TableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TableViewCell.swift; sourceTree = ""; }; 59 | B4E0F520AD34A10637573ABA901DABE7 /* Pods-MRTableViewManager_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MRTableViewManager_Tests-resources.sh"; sourceTree = ""; }; 60 | C9649783F53E567FBB96FA2E334C7E23 /* Pods-MRTableViewManager_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MRTableViewManager_Example-resources.sh"; sourceTree = ""; }; 61 | CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 62 | D1186BED1C84F1FC7F6CF3F246B735D9 /* MRTableViewManager.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MRTableViewManager.xcconfig; sourceTree = ""; }; 63 | D7180446A4723821DBE38630C5621CC1 /* Pods-MRTableViewManager_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MRTableViewManager_Example-frameworks.sh"; sourceTree = ""; }; 64 | D9DBE90541D39689AD1E40E062C38DED /* MRTableViewManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MRTableViewManager-umbrella.h"; sourceTree = ""; }; 65 | D9FF9056A5D70045D71D10B44641504D /* Pods-MRTableViewManager_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MRTableViewManager_Tests-umbrella.h"; sourceTree = ""; }; 66 | DA4F6789AF9AE61CFC64D51D3DF525D9 /* Pods-MRTableViewManager_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MRTableViewManager_Example-acknowledgements.markdown"; sourceTree = ""; }; 67 | DB72939E207048C4212874B2492E1A07 /* Pods-MRTableViewManager_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MRTableViewManager_Example-umbrella.h"; sourceTree = ""; }; 68 | EF5DC7DB28C7A9D424042D7A9548A9F1 /* Pods-MRTableViewManager_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MRTableViewManager_Example.modulemap"; sourceTree = ""; }; 69 | F319B74BC69E046D4A620023F5B748F6 /* TableViewRow.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TableViewRow.swift; sourceTree = ""; }; 70 | F47A6A097EFCA51AC75235BE6EC20372 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 71 | /* End PBXFileReference section */ 72 | 73 | /* Begin PBXFrameworksBuildPhase section */ 74 | 54DF8FDEFF3C9B4CBCEAA4BDDB1C7FE5 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | 215ABA28C705B9F75C95BD33C8D73633 /* Foundation.framework in Frameworks */, 79 | ); 80 | runOnlyForDeploymentPostprocessing = 0; 81 | }; 82 | E8A3308DA64A8FB72CBC3C34A6F06C6B /* Frameworks */ = { 83 | isa = PBXFrameworksBuildPhase; 84 | buildActionMask = 2147483647; 85 | files = ( 86 | 9AFA8AA2518A7CC599438C7F3A3A6545 /* Foundation.framework in Frameworks */, 87 | ); 88 | runOnlyForDeploymentPostprocessing = 0; 89 | }; 90 | EF113775AD0186A4AE50C0EF6B75FB93 /* Frameworks */ = { 91 | isa = PBXFrameworksBuildPhase; 92 | buildActionMask = 2147483647; 93 | files = ( 94 | F8C0DE154158C1F8A446E2C266D2FA26 /* Foundation.framework in Frameworks */, 95 | ); 96 | runOnlyForDeploymentPostprocessing = 0; 97 | }; 98 | /* End PBXFrameworksBuildPhase section */ 99 | 100 | /* Begin PBXGroup section */ 101 | 1548BD740CD27B4B3D18B42A41CAA90E /* Development Pods */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | A12EA94158E2E2D3C7D38D8D87EA57AE /* MRTableViewManager */, 105 | ); 106 | name = "Development Pods"; 107 | sourceTree = ""; 108 | }; 109 | 22627DD7A2DAE8B0581818FC48AD63C6 /* MRTableViewManager */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 3308F8AE72EDACFC74D9022A6454A530 /* Classes */, 113 | ); 114 | path = MRTableViewManager; 115 | sourceTree = ""; 116 | }; 117 | 3308F8AE72EDACFC74D9022A6454A530 /* Classes */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | B39013D4445BF989624F6EB3631BFFED /* TableViewCell.swift */, 121 | 0EAC0BFE9BC731FB86F7B112827D2E6E /* TableViewManager.swift */, 122 | F319B74BC69E046D4A620023F5B748F6 /* TableViewRow.swift */, 123 | 6893089870F817AB258EA98CEF9BAB15 /* TableViewSection.swift */, 124 | ); 125 | path = Classes; 126 | sourceTree = ""; 127 | }; 128 | 3DCAB2B7CDE207B3958B6CB957FCC758 /* iOS */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | CEC22C73C1608DFA5D5D78BDCB218219 /* Foundation.framework */, 132 | ); 133 | name = iOS; 134 | sourceTree = ""; 135 | }; 136 | 5F6A629D8DB33F27FB28859887C3C91A /* Products */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 6D12109311ECE1897671F31D2C4B516C /* MRTableViewManager.framework */, 140 | 403B390004FC8D2B9659826173F4C05B /* Pods_MRTableViewManager_Example.framework */, 141 | 3BC2502F1ED8690B89677E8202134D5C /* Pods_MRTableViewManager_Tests.framework */, 142 | ); 143 | name = Products; 144 | sourceTree = ""; 145 | }; 146 | 641E2E3DD627E576A0CD1BB8FEAE2693 /* Targets Support Files */ = { 147 | isa = PBXGroup; 148 | children = ( 149 | D4D6F9310E85AD827B178C011428E63B /* Pods-MRTableViewManager_Example */, 150 | F7223AA851D331DEBE985AF1F366A764 /* Pods-MRTableViewManager_Tests */, 151 | ); 152 | name = "Targets Support Files"; 153 | sourceTree = ""; 154 | }; 155 | 7DB346D0F39D3F0E887471402A8071AB = { 156 | isa = PBXGroup; 157 | children = ( 158 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 159 | 1548BD740CD27B4B3D18B42A41CAA90E /* Development Pods */, 160 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 161 | 5F6A629D8DB33F27FB28859887C3C91A /* Products */, 162 | 641E2E3DD627E576A0CD1BB8FEAE2693 /* Targets Support Files */, 163 | ); 164 | sourceTree = ""; 165 | }; 166 | 9A0B0D27A8F08937C8B2B0775243BE93 /* Support Files */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 3ABB8190C4A331CB5FEE48EE712645AA /* Info.plist */, 170 | 1D4B7001EA6200F8CFC1FCBE9F681296 /* MRTableViewManager.modulemap */, 171 | D1186BED1C84F1FC7F6CF3F246B735D9 /* MRTableViewManager.xcconfig */, 172 | A6A92302DFE0C1230F98AA56C66411D7 /* MRTableViewManager-dummy.m */, 173 | 14398E378E4257DA317549FA82C878C9 /* MRTableViewManager-prefix.pch */, 174 | D9DBE90541D39689AD1E40E062C38DED /* MRTableViewManager-umbrella.h */, 175 | ); 176 | name = "Support Files"; 177 | path = "Example/Pods/Target Support Files/MRTableViewManager"; 178 | sourceTree = ""; 179 | }; 180 | A12EA94158E2E2D3C7D38D8D87EA57AE /* MRTableViewManager */ = { 181 | isa = PBXGroup; 182 | children = ( 183 | 22627DD7A2DAE8B0581818FC48AD63C6 /* MRTableViewManager */, 184 | 9A0B0D27A8F08937C8B2B0775243BE93 /* Support Files */, 185 | ); 186 | name = MRTableViewManager; 187 | path = ../..; 188 | sourceTree = ""; 189 | }; 190 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 191 | isa = PBXGroup; 192 | children = ( 193 | 3DCAB2B7CDE207B3958B6CB957FCC758 /* iOS */, 194 | ); 195 | name = Frameworks; 196 | sourceTree = ""; 197 | }; 198 | D4D6F9310E85AD827B178C011428E63B /* Pods-MRTableViewManager_Example */ = { 199 | isa = PBXGroup; 200 | children = ( 201 | A13B8CF4B15FA892B40330FA345B13B9 /* Info.plist */, 202 | EF5DC7DB28C7A9D424042D7A9548A9F1 /* Pods-MRTableViewManager_Example.modulemap */, 203 | DA4F6789AF9AE61CFC64D51D3DF525D9 /* Pods-MRTableViewManager_Example-acknowledgements.markdown */, 204 | 0ECAD313411C2745FC6ADBD7D6D8A8D8 /* Pods-MRTableViewManager_Example-acknowledgements.plist */, 205 | 408BB34056F24AFE6D289DBB61A26D3D /* Pods-MRTableViewManager_Example-dummy.m */, 206 | D7180446A4723821DBE38630C5621CC1 /* Pods-MRTableViewManager_Example-frameworks.sh */, 207 | C9649783F53E567FBB96FA2E334C7E23 /* Pods-MRTableViewManager_Example-resources.sh */, 208 | DB72939E207048C4212874B2492E1A07 /* Pods-MRTableViewManager_Example-umbrella.h */, 209 | 754D1419BABF81DC8497641AD995D4D6 /* Pods-MRTableViewManager_Example.debug.xcconfig */, 210 | 541812013421F75676E091964322B13F /* Pods-MRTableViewManager_Example.release.xcconfig */, 211 | ); 212 | name = "Pods-MRTableViewManager_Example"; 213 | path = "Target Support Files/Pods-MRTableViewManager_Example"; 214 | sourceTree = ""; 215 | }; 216 | F7223AA851D331DEBE985AF1F366A764 /* Pods-MRTableViewManager_Tests */ = { 217 | isa = PBXGroup; 218 | children = ( 219 | F47A6A097EFCA51AC75235BE6EC20372 /* Info.plist */, 220 | 7DA92ACE58D30EA5A68DEF57B737D670 /* Pods-MRTableViewManager_Tests.modulemap */, 221 | 040F920C8FE1A669DA1A78764182FA70 /* Pods-MRTableViewManager_Tests-acknowledgements.markdown */, 222 | 64CEC2621624F9925DDCD8C96F44A16D /* Pods-MRTableViewManager_Tests-acknowledgements.plist */, 223 | 7451DDC8809F45E3E9C91694FBC7A074 /* Pods-MRTableViewManager_Tests-dummy.m */, 224 | 3291ECC633348A3AB70DC005D917179A /* Pods-MRTableViewManager_Tests-frameworks.sh */, 225 | B4E0F520AD34A10637573ABA901DABE7 /* Pods-MRTableViewManager_Tests-resources.sh */, 226 | D9FF9056A5D70045D71D10B44641504D /* Pods-MRTableViewManager_Tests-umbrella.h */, 227 | 1A3489923C1AB6A12DEBC5FCA475E7CB /* Pods-MRTableViewManager_Tests.debug.xcconfig */, 228 | 6DECE4B86DD8C16842E1BD16B9BBB6E7 /* Pods-MRTableViewManager_Tests.release.xcconfig */, 229 | ); 230 | name = "Pods-MRTableViewManager_Tests"; 231 | path = "Target Support Files/Pods-MRTableViewManager_Tests"; 232 | sourceTree = ""; 233 | }; 234 | /* End PBXGroup section */ 235 | 236 | /* Begin PBXHeadersBuildPhase section */ 237 | 20CE1A644907746E2DB3FC1695ACACE8 /* Headers */ = { 238 | isa = PBXHeadersBuildPhase; 239 | buildActionMask = 2147483647; 240 | files = ( 241 | CFEA5A2F653A8F9FC5814D8E0BBEC5A4 /* MRTableViewManager-umbrella.h in Headers */, 242 | ); 243 | runOnlyForDeploymentPostprocessing = 0; 244 | }; 245 | CB71F4676FA90A263D2C5561D309FC5C /* Headers */ = { 246 | isa = PBXHeadersBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | F932CE5129F30CE8AEF355C0B5F8023D /* Pods-MRTableViewManager_Tests-umbrella.h in Headers */, 250 | ); 251 | runOnlyForDeploymentPostprocessing = 0; 252 | }; 253 | EEE5B80A94F72B8EE18224A08A3AE32E /* Headers */ = { 254 | isa = PBXHeadersBuildPhase; 255 | buildActionMask = 2147483647; 256 | files = ( 257 | 37E5F52D9EEC1B00DF95B18BE11744A9 /* Pods-MRTableViewManager_Example-umbrella.h in Headers */, 258 | ); 259 | runOnlyForDeploymentPostprocessing = 0; 260 | }; 261 | /* End PBXHeadersBuildPhase section */ 262 | 263 | /* Begin PBXNativeTarget section */ 264 | 068B8D8C019877B796810566B73630CD /* Pods-MRTableViewManager_Example */ = { 265 | isa = PBXNativeTarget; 266 | buildConfigurationList = EC4311448FBAA9F43244065B09D28966 /* Build configuration list for PBXNativeTarget "Pods-MRTableViewManager_Example" */; 267 | buildPhases = ( 268 | 21E6BC1A3A6EEE68C0A6F7D549B8ED30 /* Sources */, 269 | E8A3308DA64A8FB72CBC3C34A6F06C6B /* Frameworks */, 270 | EEE5B80A94F72B8EE18224A08A3AE32E /* Headers */, 271 | ); 272 | buildRules = ( 273 | ); 274 | dependencies = ( 275 | 40A377E45BEEE8C6436FE1C5E58F2E7E /* PBXTargetDependency */, 276 | ); 277 | name = "Pods-MRTableViewManager_Example"; 278 | productName = "Pods-MRTableViewManager_Example"; 279 | productReference = 403B390004FC8D2B9659826173F4C05B /* Pods_MRTableViewManager_Example.framework */; 280 | productType = "com.apple.product-type.framework"; 281 | }; 282 | C2AF159853D9AC889C4CDDE76DE38325 /* MRTableViewManager */ = { 283 | isa = PBXNativeTarget; 284 | buildConfigurationList = D3EFACF6634A1406AD38CE0BF2C5195D /* Build configuration list for PBXNativeTarget "MRTableViewManager" */; 285 | buildPhases = ( 286 | 9C2341070242471EC1249915355CF283 /* Sources */, 287 | 54DF8FDEFF3C9B4CBCEAA4BDDB1C7FE5 /* Frameworks */, 288 | 20CE1A644907746E2DB3FC1695ACACE8 /* Headers */, 289 | ); 290 | buildRules = ( 291 | ); 292 | dependencies = ( 293 | ); 294 | name = MRTableViewManager; 295 | productName = MRTableViewManager; 296 | productReference = 6D12109311ECE1897671F31D2C4B516C /* MRTableViewManager.framework */; 297 | productType = "com.apple.product-type.framework"; 298 | }; 299 | EB9B41B850691B38AFAE569B81C8F82B /* Pods-MRTableViewManager_Tests */ = { 300 | isa = PBXNativeTarget; 301 | buildConfigurationList = 4CE08A00F15C610ABE075C1041798279 /* Build configuration list for PBXNativeTarget "Pods-MRTableViewManager_Tests" */; 302 | buildPhases = ( 303 | 948AF25ECB00FCBC4B6EC5078A913036 /* Sources */, 304 | EF113775AD0186A4AE50C0EF6B75FB93 /* Frameworks */, 305 | CB71F4676FA90A263D2C5561D309FC5C /* Headers */, 306 | ); 307 | buildRules = ( 308 | ); 309 | dependencies = ( 310 | ); 311 | name = "Pods-MRTableViewManager_Tests"; 312 | productName = "Pods-MRTableViewManager_Tests"; 313 | productReference = 3BC2502F1ED8690B89677E8202134D5C /* Pods_MRTableViewManager_Tests.framework */; 314 | productType = "com.apple.product-type.framework"; 315 | }; 316 | /* End PBXNativeTarget section */ 317 | 318 | /* Begin PBXProject section */ 319 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 320 | isa = PBXProject; 321 | attributes = { 322 | LastSwiftUpdateCheck = 0730; 323 | LastUpgradeCheck = 0700; 324 | }; 325 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 326 | compatibilityVersion = "Xcode 3.2"; 327 | developmentRegion = English; 328 | hasScannedForEncodings = 0; 329 | knownRegions = ( 330 | en, 331 | ); 332 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 333 | productRefGroup = 5F6A629D8DB33F27FB28859887C3C91A /* Products */; 334 | projectDirPath = ""; 335 | projectRoot = ""; 336 | targets = ( 337 | C2AF159853D9AC889C4CDDE76DE38325 /* MRTableViewManager */, 338 | 068B8D8C019877B796810566B73630CD /* Pods-MRTableViewManager_Example */, 339 | EB9B41B850691B38AFAE569B81C8F82B /* Pods-MRTableViewManager_Tests */, 340 | ); 341 | }; 342 | /* End PBXProject section */ 343 | 344 | /* Begin PBXSourcesBuildPhase section */ 345 | 21E6BC1A3A6EEE68C0A6F7D549B8ED30 /* Sources */ = { 346 | isa = PBXSourcesBuildPhase; 347 | buildActionMask = 2147483647; 348 | files = ( 349 | 1324F8BDA576596D5F22EE0B6F9F368C /* Pods-MRTableViewManager_Example-dummy.m in Sources */, 350 | ); 351 | runOnlyForDeploymentPostprocessing = 0; 352 | }; 353 | 948AF25ECB00FCBC4B6EC5078A913036 /* Sources */ = { 354 | isa = PBXSourcesBuildPhase; 355 | buildActionMask = 2147483647; 356 | files = ( 357 | 7FA9DCDE53B00F675D628C5729079F0D /* Pods-MRTableViewManager_Tests-dummy.m in Sources */, 358 | ); 359 | runOnlyForDeploymentPostprocessing = 0; 360 | }; 361 | 9C2341070242471EC1249915355CF283 /* Sources */ = { 362 | isa = PBXSourcesBuildPhase; 363 | buildActionMask = 2147483647; 364 | files = ( 365 | 130EBC4BA40A1595587D77164F0E4034 /* MRTableViewManager-dummy.m in Sources */, 366 | D8875138C850FC9E856A51E5232853D9 /* TableViewCell.swift in Sources */, 367 | 50BB2F2029B3566D401276F3F71B42EB /* TableViewManager.swift in Sources */, 368 | D79780A9E4F0F5D51F6B6A5069DBDD3D /* TableViewRow.swift in Sources */, 369 | 5D571251D509D0344E5580535F192CB0 /* TableViewSection.swift in Sources */, 370 | ); 371 | runOnlyForDeploymentPostprocessing = 0; 372 | }; 373 | /* End PBXSourcesBuildPhase section */ 374 | 375 | /* Begin PBXTargetDependency section */ 376 | 40A377E45BEEE8C6436FE1C5E58F2E7E /* PBXTargetDependency */ = { 377 | isa = PBXTargetDependency; 378 | name = MRTableViewManager; 379 | target = C2AF159853D9AC889C4CDDE76DE38325 /* MRTableViewManager */; 380 | targetProxy = D9B0767764DF9E76AF2EBA70D80CC1A1 /* PBXContainerItemProxy */; 381 | }; 382 | /* End PBXTargetDependency section */ 383 | 384 | /* Begin XCBuildConfiguration section */ 385 | 0ACDCBCB0B6796575F46FFA2F5410C6B /* Release */ = { 386 | isa = XCBuildConfiguration; 387 | buildSettings = { 388 | ALWAYS_SEARCH_USER_PATHS = NO; 389 | CLANG_ANALYZER_NONNULL = YES; 390 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 391 | CLANG_CXX_LIBRARY = "libc++"; 392 | CLANG_ENABLE_MODULES = YES; 393 | CLANG_ENABLE_OBJC_ARC = YES; 394 | CLANG_WARN_BOOL_CONVERSION = YES; 395 | CLANG_WARN_CONSTANT_CONVERSION = YES; 396 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 397 | CLANG_WARN_EMPTY_BODY = YES; 398 | CLANG_WARN_ENUM_CONVERSION = YES; 399 | CLANG_WARN_INT_CONVERSION = YES; 400 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 401 | CLANG_WARN_UNREACHABLE_CODE = YES; 402 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 403 | COPY_PHASE_STRIP = YES; 404 | ENABLE_NS_ASSERTIONS = NO; 405 | GCC_C_LANGUAGE_STANDARD = gnu99; 406 | GCC_PREPROCESSOR_DEFINITIONS = ( 407 | "POD_CONFIGURATION_RELEASE=1", 408 | "$(inherited)", 409 | ); 410 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 411 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 412 | GCC_WARN_UNDECLARED_SELECTOR = YES; 413 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 414 | GCC_WARN_UNUSED_FUNCTION = YES; 415 | GCC_WARN_UNUSED_VARIABLE = YES; 416 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 417 | STRIP_INSTALLED_PRODUCT = NO; 418 | SYMROOT = "${SRCROOT}/../build"; 419 | VALIDATE_PRODUCT = YES; 420 | }; 421 | name = Release; 422 | }; 423 | 1FFC39131CAC27A8DC6353C3D4BB306E /* Debug */ = { 424 | isa = XCBuildConfiguration; 425 | baseConfigurationReference = 1A3489923C1AB6A12DEBC5FCA475E7CB /* Pods-MRTableViewManager_Tests.debug.xcconfig */; 426 | buildSettings = { 427 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 428 | CURRENT_PROJECT_VERSION = 1; 429 | DEBUG_INFORMATION_FORMAT = dwarf; 430 | DEFINES_MODULE = YES; 431 | DYLIB_COMPATIBILITY_VERSION = 1; 432 | DYLIB_CURRENT_VERSION = 1; 433 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 434 | ENABLE_STRICT_OBJC_MSGSEND = YES; 435 | GCC_NO_COMMON_BLOCKS = YES; 436 | INFOPLIST_FILE = "Target Support Files/Pods-MRTableViewManager_Tests/Info.plist"; 437 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 438 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 439 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 440 | MACH_O_TYPE = staticlib; 441 | MODULEMAP_FILE = "Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.modulemap"; 442 | MTL_ENABLE_DEBUG_INFO = YES; 443 | OTHER_LDFLAGS = ""; 444 | OTHER_LIBTOOLFLAGS = ""; 445 | PODS_ROOT = "$(SRCROOT)"; 446 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 447 | PRODUCT_NAME = Pods_MRTableViewManager_Tests; 448 | SDKROOT = iphoneos; 449 | SKIP_INSTALL = YES; 450 | TARGETED_DEVICE_FAMILY = "1,2"; 451 | VERSIONING_SYSTEM = "apple-generic"; 452 | VERSION_INFO_PREFIX = ""; 453 | }; 454 | name = Debug; 455 | }; 456 | 4F43E8488CF66FD695002AC20D7855EB /* Debug */ = { 457 | isa = XCBuildConfiguration; 458 | baseConfigurationReference = D1186BED1C84F1FC7F6CF3F246B735D9 /* MRTableViewManager.xcconfig */; 459 | buildSettings = { 460 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 461 | CURRENT_PROJECT_VERSION = 1; 462 | DEBUG_INFORMATION_FORMAT = dwarf; 463 | DEFINES_MODULE = YES; 464 | DYLIB_COMPATIBILITY_VERSION = 1; 465 | DYLIB_CURRENT_VERSION = 1; 466 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 467 | ENABLE_STRICT_OBJC_MSGSEND = YES; 468 | GCC_NO_COMMON_BLOCKS = YES; 469 | GCC_PREFIX_HEADER = "Target Support Files/MRTableViewManager/MRTableViewManager-prefix.pch"; 470 | INFOPLIST_FILE = "Target Support Files/MRTableViewManager/Info.plist"; 471 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 472 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 473 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 474 | MODULEMAP_FILE = "Target Support Files/MRTableViewManager/MRTableViewManager.modulemap"; 475 | MTL_ENABLE_DEBUG_INFO = YES; 476 | PRODUCT_NAME = MRTableViewManager; 477 | SDKROOT = iphoneos; 478 | SKIP_INSTALL = YES; 479 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 480 | TARGETED_DEVICE_FAMILY = "1,2"; 481 | VERSIONING_SYSTEM = "apple-generic"; 482 | VERSION_INFO_PREFIX = ""; 483 | }; 484 | name = Debug; 485 | }; 486 | 72FC2B6B8A75AA293F5942E4154D37F6 /* Release */ = { 487 | isa = XCBuildConfiguration; 488 | baseConfigurationReference = 541812013421F75676E091964322B13F /* Pods-MRTableViewManager_Example.release.xcconfig */; 489 | buildSettings = { 490 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 491 | CURRENT_PROJECT_VERSION = 1; 492 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 493 | DEFINES_MODULE = YES; 494 | DYLIB_COMPATIBILITY_VERSION = 1; 495 | DYLIB_CURRENT_VERSION = 1; 496 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 497 | ENABLE_STRICT_OBJC_MSGSEND = YES; 498 | GCC_NO_COMMON_BLOCKS = YES; 499 | INFOPLIST_FILE = "Target Support Files/Pods-MRTableViewManager_Example/Info.plist"; 500 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 501 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 502 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 503 | MACH_O_TYPE = staticlib; 504 | MODULEMAP_FILE = "Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.modulemap"; 505 | MTL_ENABLE_DEBUG_INFO = NO; 506 | OTHER_LDFLAGS = ""; 507 | OTHER_LIBTOOLFLAGS = ""; 508 | PODS_ROOT = "$(SRCROOT)"; 509 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 510 | PRODUCT_NAME = Pods_MRTableViewManager_Example; 511 | SDKROOT = iphoneos; 512 | SKIP_INSTALL = YES; 513 | TARGETED_DEVICE_FAMILY = "1,2"; 514 | VERSIONING_SYSTEM = "apple-generic"; 515 | VERSION_INFO_PREFIX = ""; 516 | }; 517 | name = Release; 518 | }; 519 | A6679D8153F4961C7F99338CC1E33F56 /* Release */ = { 520 | isa = XCBuildConfiguration; 521 | baseConfigurationReference = 6DECE4B86DD8C16842E1BD16B9BBB6E7 /* Pods-MRTableViewManager_Tests.release.xcconfig */; 522 | buildSettings = { 523 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 524 | CURRENT_PROJECT_VERSION = 1; 525 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 526 | DEFINES_MODULE = YES; 527 | DYLIB_COMPATIBILITY_VERSION = 1; 528 | DYLIB_CURRENT_VERSION = 1; 529 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 530 | ENABLE_STRICT_OBJC_MSGSEND = YES; 531 | GCC_NO_COMMON_BLOCKS = YES; 532 | INFOPLIST_FILE = "Target Support Files/Pods-MRTableViewManager_Tests/Info.plist"; 533 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 534 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 535 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 536 | MACH_O_TYPE = staticlib; 537 | MODULEMAP_FILE = "Target Support Files/Pods-MRTableViewManager_Tests/Pods-MRTableViewManager_Tests.modulemap"; 538 | MTL_ENABLE_DEBUG_INFO = NO; 539 | OTHER_LDFLAGS = ""; 540 | OTHER_LIBTOOLFLAGS = ""; 541 | PODS_ROOT = "$(SRCROOT)"; 542 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 543 | PRODUCT_NAME = Pods_MRTableViewManager_Tests; 544 | SDKROOT = iphoneos; 545 | SKIP_INSTALL = YES; 546 | TARGETED_DEVICE_FAMILY = "1,2"; 547 | VERSIONING_SYSTEM = "apple-generic"; 548 | VERSION_INFO_PREFIX = ""; 549 | }; 550 | name = Release; 551 | }; 552 | B57827D26886D53039570FE15C54C3D7 /* Debug */ = { 553 | isa = XCBuildConfiguration; 554 | baseConfigurationReference = 754D1419BABF81DC8497641AD995D4D6 /* Pods-MRTableViewManager_Example.debug.xcconfig */; 555 | buildSettings = { 556 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 557 | CURRENT_PROJECT_VERSION = 1; 558 | DEBUG_INFORMATION_FORMAT = dwarf; 559 | DEFINES_MODULE = YES; 560 | DYLIB_COMPATIBILITY_VERSION = 1; 561 | DYLIB_CURRENT_VERSION = 1; 562 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 563 | ENABLE_STRICT_OBJC_MSGSEND = YES; 564 | GCC_NO_COMMON_BLOCKS = YES; 565 | INFOPLIST_FILE = "Target Support Files/Pods-MRTableViewManager_Example/Info.plist"; 566 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 567 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 568 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 569 | MACH_O_TYPE = staticlib; 570 | MODULEMAP_FILE = "Target Support Files/Pods-MRTableViewManager_Example/Pods-MRTableViewManager_Example.modulemap"; 571 | MTL_ENABLE_DEBUG_INFO = YES; 572 | OTHER_LDFLAGS = ""; 573 | OTHER_LIBTOOLFLAGS = ""; 574 | PODS_ROOT = "$(SRCROOT)"; 575 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 576 | PRODUCT_NAME = Pods_MRTableViewManager_Example; 577 | SDKROOT = iphoneos; 578 | SKIP_INSTALL = YES; 579 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 580 | TARGETED_DEVICE_FAMILY = "1,2"; 581 | VERSIONING_SYSTEM = "apple-generic"; 582 | VERSION_INFO_PREFIX = ""; 583 | }; 584 | name = Debug; 585 | }; 586 | C8FBEF0908735BE1D1A325F600668377 /* Release */ = { 587 | isa = XCBuildConfiguration; 588 | baseConfigurationReference = D1186BED1C84F1FC7F6CF3F246B735D9 /* MRTableViewManager.xcconfig */; 589 | buildSettings = { 590 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 591 | CURRENT_PROJECT_VERSION = 1; 592 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 593 | DEFINES_MODULE = YES; 594 | DYLIB_COMPATIBILITY_VERSION = 1; 595 | DYLIB_CURRENT_VERSION = 1; 596 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 597 | ENABLE_STRICT_OBJC_MSGSEND = YES; 598 | GCC_NO_COMMON_BLOCKS = YES; 599 | GCC_PREFIX_HEADER = "Target Support Files/MRTableViewManager/MRTableViewManager-prefix.pch"; 600 | INFOPLIST_FILE = "Target Support Files/MRTableViewManager/Info.plist"; 601 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 602 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 603 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 604 | MODULEMAP_FILE = "Target Support Files/MRTableViewManager/MRTableViewManager.modulemap"; 605 | MTL_ENABLE_DEBUG_INFO = NO; 606 | PRODUCT_NAME = MRTableViewManager; 607 | SDKROOT = iphoneos; 608 | SKIP_INSTALL = YES; 609 | TARGETED_DEVICE_FAMILY = "1,2"; 610 | VERSIONING_SYSTEM = "apple-generic"; 611 | VERSION_INFO_PREFIX = ""; 612 | }; 613 | name = Release; 614 | }; 615 | D3E3D092A3FF7311A98E44BBA36FFD12 /* Debug */ = { 616 | isa = XCBuildConfiguration; 617 | buildSettings = { 618 | ALWAYS_SEARCH_USER_PATHS = NO; 619 | CLANG_ANALYZER_NONNULL = YES; 620 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 621 | CLANG_CXX_LIBRARY = "libc++"; 622 | CLANG_ENABLE_MODULES = YES; 623 | CLANG_ENABLE_OBJC_ARC = YES; 624 | CLANG_WARN_BOOL_CONVERSION = YES; 625 | CLANG_WARN_CONSTANT_CONVERSION = YES; 626 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 627 | CLANG_WARN_EMPTY_BODY = YES; 628 | CLANG_WARN_ENUM_CONVERSION = YES; 629 | CLANG_WARN_INT_CONVERSION = YES; 630 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 631 | CLANG_WARN_UNREACHABLE_CODE = YES; 632 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 633 | COPY_PHASE_STRIP = NO; 634 | ENABLE_TESTABILITY = YES; 635 | GCC_C_LANGUAGE_STANDARD = gnu99; 636 | GCC_DYNAMIC_NO_PIC = NO; 637 | GCC_OPTIMIZATION_LEVEL = 0; 638 | GCC_PREPROCESSOR_DEFINITIONS = ( 639 | "POD_CONFIGURATION_DEBUG=1", 640 | "DEBUG=1", 641 | "$(inherited)", 642 | ); 643 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 644 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 645 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 646 | GCC_WARN_UNDECLARED_SELECTOR = YES; 647 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 648 | GCC_WARN_UNUSED_FUNCTION = YES; 649 | GCC_WARN_UNUSED_VARIABLE = YES; 650 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 651 | ONLY_ACTIVE_ARCH = YES; 652 | STRIP_INSTALLED_PRODUCT = NO; 653 | SYMROOT = "${SRCROOT}/../build"; 654 | }; 655 | name = Debug; 656 | }; 657 | /* End XCBuildConfiguration section */ 658 | 659 | /* Begin XCConfigurationList section */ 660 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 661 | isa = XCConfigurationList; 662 | buildConfigurations = ( 663 | D3E3D092A3FF7311A98E44BBA36FFD12 /* Debug */, 664 | 0ACDCBCB0B6796575F46FFA2F5410C6B /* Release */, 665 | ); 666 | defaultConfigurationIsVisible = 0; 667 | defaultConfigurationName = Release; 668 | }; 669 | 4CE08A00F15C610ABE075C1041798279 /* Build configuration list for PBXNativeTarget "Pods-MRTableViewManager_Tests" */ = { 670 | isa = XCConfigurationList; 671 | buildConfigurations = ( 672 | 1FFC39131CAC27A8DC6353C3D4BB306E /* Debug */, 673 | A6679D8153F4961C7F99338CC1E33F56 /* Release */, 674 | ); 675 | defaultConfigurationIsVisible = 0; 676 | defaultConfigurationName = Release; 677 | }; 678 | D3EFACF6634A1406AD38CE0BF2C5195D /* Build configuration list for PBXNativeTarget "MRTableViewManager" */ = { 679 | isa = XCConfigurationList; 680 | buildConfigurations = ( 681 | 4F43E8488CF66FD695002AC20D7855EB /* Debug */, 682 | C8FBEF0908735BE1D1A325F600668377 /* Release */, 683 | ); 684 | defaultConfigurationIsVisible = 0; 685 | defaultConfigurationName = Release; 686 | }; 687 | EC4311448FBAA9F43244065B09D28966 /* Build configuration list for PBXNativeTarget "Pods-MRTableViewManager_Example" */ = { 688 | isa = XCConfigurationList; 689 | buildConfigurations = ( 690 | B57827D26886D53039570FE15C54C3D7 /* Debug */, 691 | 72FC2B6B8A75AA293F5942E4154D37F6 /* Release */, 692 | ); 693 | defaultConfigurationIsVisible = 0; 694 | defaultConfigurationName = Release; 695 | }; 696 | /* End XCConfigurationList section */ 697 | }; 698 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 699 | } 700 | -------------------------------------------------------------------------------- /foobars-header.txt: -------------------------------------------------------------------------------- 1 | { 2 | "foobars": 3 | { 4 | "warriors": [ 5 | { 6 | "id": 2, 7 | "character": "Aragorn" 8 | }, 9 | { 10 | "id": 7, 11 | "character": "Legolas" 12 | }, 13 | { 14 | "id": 8, 15 | "character": "Gimli" 16 | } 17 | ], 18 | "wizards":[ 19 | { 20 | "id": 1, 21 | "character": "Gandalf" 22 | } 23 | ], 24 | "hobbits":[ 25 | { 26 | "id": 4, 27 | "character": "Frodo Baggins" 28 | }, 29 | { 30 | "id": 5, 31 | "character": "Sam" 32 | }, 33 | { 34 | "id": 3, 35 | "character": "Bilbo" 36 | }, 37 | { 38 | "id": 9, 39 | "character": "Pippin" 40 | }, 41 | { 42 | "id": 10, 43 | "character": "Merry" 44 | } 45 | ], 46 | "visitors": [ 47 | { 48 | "id": 6, 49 | "character": "Gollum" 50 | } 51 | ] 52 | } 53 | } -------------------------------------------------------------------------------- /foobars.txt: -------------------------------------------------------------------------------- 1 | { 2 | "foobars":[ 3 | { 4 | "id":1, 5 | "character":"Gandalf", 6 | "actor":"Ian McKellen", 7 | "bio":"Gandalf the Grey (also known as Mithrandir and Olórin) is a wise wizard who was sent to Middle-Earth around year 1000 in the Third Age, more than 2000 years before the setting of The Lord of the Rings, to help the free peoples fight the evil Sauron, along with Saruman the White (who later abandoned his task) and three other wizards. Gandalf befriended many peoples and became a well-known name all over Middle-Earth.", 8 | "image":"https://ia.media-imdb.com/images/M/MV5BMTc1MDA4NjI4Nl5BMl5BanBnXkFtZTcwMzc1Mzg3OA@@._V1._SX100_SY140_.jpg" 9 | }, 10 | { 11 | "id":2, 12 | "character":"Aragorn", 13 | "actor":"Viggo Mortensen", 14 | "bio":"Aragorn II was the son of Arathorn and Gilraen, and an only child. He was born on March 1st, 2931 of the Third Age, he was the thirty-ninth generation of the heirs of Isildur. Aragorn was only two years old when his father died, so his mother took him to live in Rivendell. There, he was given the name Estel to hide his true identity and heritage because Sauron was searching to see if any heir of Isildur lived. ", 15 | "image":"https://ia.media-imdb.com/images/M/MV5BMTE5NjA0MTk3M15BMl5BanBnXkFtZTYwMTg0MjA3._V1._SX100_SY140_.jpg" 16 | }, 17 | { 18 | "id":3, 19 | "character":"Bilbo Baggins", 20 | "actor":"Ian Holm", 21 | "bio":"Bilbo Baggins is a Hobbit of the Shire, born on September 22nd in the year 2890 (1290 Shire Reckoning) of the Third Age of Middle-earth (using J.R.R. Tolkien's literary timeline). In 2941, the Wizard Gandalf enlisted Bilbo as a burglar for Thorin Oakenshield and Company, Dwarves intent on liberating their ancestral treasure from the dragon Smaug", 22 | "image":"https://ia.media-imdb.com/images/M/MV5BMTc3MTMyODg5MF5BMl5BanBnXkFtZTcwNjc3NDk0OA@@._V1._SX100_SY140_.jpg" 23 | }, 24 | { 25 | "id":4, 26 | "character":"Frodo Baggins", 27 | "actor":"Elijah Wood", 28 | "bio":"Frodo Baggins is a Hobbit of the Shire, born on September 22nd in the year 2968 (1368 Shire Reckoning) of the Third Age of Middle-earth (using J.R.R. Tolkien's literary timeline). In 2980, following the deaths of his parents Drogo and Primula Baggins, Frodo is adopted by his older cousin Bilbo and is named as his heir.", 29 | "image":"https://ia.media-imdb.com/images/M/MV5BMTYzODgwNDUzMV5BMl5BanBnXkFtZTcwNTY3NDk2Mw@@._V1._SX100_SY140_.jpg" 30 | }, 31 | { 32 | "id":5, 33 | "character":"Sam", 34 | "actor":"Sean Astin", 35 | "bio":"Samwise Gamgee also known as Sam is a Hobbit of the Shire. He is Frodo Baggins's gardener and his companion on his journey to Mount Doom. When Gandalf comes to the Shire to tell Frodo the truth about the ring he inherited from his uncle Bilbo, he catches Sam eavesdropping, and orders him to go with Frodo on his journey. ", 36 | "image":"https://ia.media-imdb.com/images/M/MV5BMTgyMTQ4MTI3OV5BMl5BanBnXkFtZTcwMzgwMjk2Mw@@._V1._SX100_SY140_.jpg" 37 | }, 38 | { 39 | "id":6, 40 | "character":"Gollum", 41 | "actor":"Andy Serkis", 42 | "bio":"A character in The Return of the King, I am Gollum, a Stoor and the ancient ring bearer who had the One Ring before Bilbo and Frodo. Other names I am known as are: Trahald, Slinker and Stinker. Before he became Gollum he was formally known as Smeagol and he hailed origionally from near the Gladden Fields, Gollum is roughly 3ft 8inches tall, though it is hard to measure exactly.", 43 | "image":"https://ia.media-imdb.com/images/M/MV5BMTkyNzc1MjczOF5BMl5BanBnXkFtZTcwMTg0Mzg3OA@@._V1._SX100_SY140_.jpg" 44 | }, 45 | { 46 | "id":7, 47 | "character":"Legolas", 48 | "actor":"Orlando Bloom", 49 | "bio":"Legolas is an Elf who was part of the Fellowship of the Ring in the Third Age. He is the son of the Elf-king Thranduil of Mirkwood, a Prince of the Woodland Realm (Mirkwood), a messenger, and a master bowman. With his keen eyesight, sensitive hearing, and excellent bowmanship, Legolas is a valuable resource to the other eight of the Fellowship. His age was never stated by Tolkien. Legolas became great friends with the dwarf Gimli, despite their long held differences, who was also a member of the Fellowship.", 50 | "image":"https://ia.media-imdb.com/images/M/MV5BMTYzNDM4NzQwN15BMl5BanBnXkFtZTcwMzI2MjY0NA@@._V1._SX100_SY140_.jpg" 51 | }, 52 | { 53 | "id":8, 54 | "character":"Gimli", 55 | "actor":"John Rhys-Davies", 56 | "bio":"Gimli is the son of Gloin, who was one of Bilbo's companions on the quest to reclaim the Lonely Mountain from the dragon, Smaug the Magnificent. Gimli was deemed too young to go on that journey, but 77 years later would find himself traveling with Bilbo's adopted heir, Frodo Baggins, on a quest of much greater importance. Due to events in The Hobbit, Gimli held elves in contempt, but slowly over the course of The Lord of the Rings was able to embrace the pointy-eared race.", 57 | "image":"https://ia.media-imdb.com/images/M/MV5BNzcxNjI5MDYxM15BMl5BanBnXkFtZTcwODY3NDk2Mw@@._V1._SX100_SY140_.jpg" 58 | }, 59 | { 60 | "id":9, 61 | "character":"Pippin", 62 | "actor":"Billy Boyd", 63 | "bio":"Peregrin Took (nicknamed 'Pippin') is a Took and that should be description enough. Tooks dwell in the Shire in Tookborough. They're set apart from the rest of Hobbits because of their inquisitiveness and adventuresome spirit. Pippin journeys with Frodo to Rivendell and becomes a member of the Fellowship of the Ring.", 64 | "image":"https://ia.media-imdb.com/images/M/MV5BMTc2Nzg4ODk2OF5BMl5BanBnXkFtZTYwODQ1MjA3._V1._SX100_SY140_.jpg" 65 | }, 66 | { 67 | "id":10, 68 | "character":"Merry", 69 | "actor":"Dominic Monaghan", 70 | "bio":"Meriadoc 'Merry' Brandybuck is a Hobbit of the Shire and a kinsman to both Peregrin 'Pippin' Took and Frodo Baggins. Merry (along with Pippin and Frodo's servant Samwise Gamgee) accompanied Frodo on the journey to take the One Ring of Sauron to Rivendell for safe-keeping and after as one of the Companions of the Ring. The Company is broken in Parth Galen when Boromir of Gondor betrays Frodo. Merry and Pippin are captured and carried away by Orcs.", 71 | "image":"https://ia.media-imdb.com/images/M/MV5BMTI4ODY2NjMyNF5BMl5BanBnXkFtZTcwMjkwMjk2Mw@@._V1._SX100_SY140_.jpg" 72 | } 73 | ] 74 | } 75 | --------------------------------------------------------------------------------