├── .gitignore ├── Example ├── Example.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Example.xcscheme ├── Example.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Example │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── Podfile ├── Podfile.lock └── Pods │ ├── Local Podspecs │ └── InputViews.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── project.pbxproj │ └── Target Support Files │ ├── InputViews │ ├── InputViews-Info.plist │ ├── InputViews-dummy.m │ ├── InputViews-prefix.pch │ ├── InputViews-umbrella.h │ ├── InputViews.modulemap │ └── InputViews.xcconfig │ └── Pods-Example │ ├── Pods-Example-Info.plist │ ├── Pods-Example-acknowledgements.markdown │ ├── Pods-Example-acknowledgements.plist │ ├── Pods-Example-dummy.m │ ├── Pods-Example-frameworks-Debug-input-files.xcfilelist │ ├── Pods-Example-frameworks-Debug-output-files.xcfilelist │ ├── Pods-Example-frameworks-Release-input-files.xcfilelist │ ├── Pods-Example-frameworks-Release-output-files.xcfilelist │ ├── Pods-Example-frameworks.sh │ ├── Pods-Example-umbrella.h │ ├── Pods-Example.debug.xcconfig │ ├── Pods-Example.modulemap │ └── Pods-Example.release.xcconfig ├── InputViews.podspec ├── InputViews ├── AccessoryView │ └── AccessoryView.swift ├── CollectionInputView │ ├── CollectionInputView.swift │ ├── CollectionInputViewCell.swift │ └── PickFontAwesomeIconView │ │ ├── FontAwesome5FreeSolid900.otf │ │ ├── PickFontAwesomeIconView.swift │ │ └── UIFont+Custom.swift ├── ColorPickerView │ ├── ColorPicker.swift │ └── UIColor+HEX.swift ├── DatePickerInputView │ └── DatePickerInputView.swift ├── NoCutPasteField │ └── NoCutPasteField.swift ├── PickerInputView │ └── PickerInputView.swift └── TableInputView │ └── TableInputView.swift ├── LICENSE ├── README.md └── assets ├── CollectionItemsPicker.gif ├── DatePicker.gif ├── ItemPicker.gif ├── ItemsPicker.gif ├── Pick_Font_Awesome_Solid_Icon.gif ├── Pick_color.gif └── inputViews.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | # Package.resolved 41 | .build/ 42 | 43 | # CocoaPods 44 | # 45 | # We recommend against adding the Pods directory to your .gitignore. However 46 | # you should judge for yourself, the pros and cons are mentioned at: 47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 48 | # 49 | # Pods/ 50 | 51 | # Carthage 52 | # 53 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 54 | # Carthage/Checkouts 55 | 56 | Carthage/Build 57 | 58 | # fastlane 59 | # 60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 61 | # screenshots whenever they are needed. 62 | # For more information about the recommended setup visit: 63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 64 | 65 | fastlane/report.xml 66 | fastlane/Preview.html 67 | fastlane/screenshots/**/*.png 68 | fastlane/test_output 69 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1BB40EC22294DCDF00EA9DD7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB40EC12294DCDF00EA9DD7 /* AppDelegate.swift */; }; 11 | 1BB40EC42294DCDF00EA9DD7 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BB40EC32294DCDF00EA9DD7 /* ViewController.swift */; }; 12 | 1BB40EC72294DCDF00EA9DD7 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1BB40EC52294DCDF00EA9DD7 /* Main.storyboard */; }; 13 | 1BB40EC92294DCE000EA9DD7 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1BB40EC82294DCE000EA9DD7 /* Assets.xcassets */; }; 14 | 1BB40ECC2294DCE000EA9DD7 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1BB40ECA2294DCE000EA9DD7 /* LaunchScreen.storyboard */; }; 15 | 41811AAD7AF038DCFC4C3704 /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A48611BB55FC61A6379482E5 /* Pods_Example.framework */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 1BB40EBE2294DCDF00EA9DD7 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | 1BB40EC12294DCDF00EA9DD7 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 21 | 1BB40EC32294DCDF00EA9DD7 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 22 | 1BB40EC62294DCDF00EA9DD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 23 | 1BB40EC82294DCE000EA9DD7 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 24 | 1BB40ECB2294DCE000EA9DD7 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 25 | 1BB40ECD2294DCE000EA9DD7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 26 | A48611BB55FC61A6379482E5 /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | C985D8C5FA47E3A13E4B74E5 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; }; 28 | FA47D41EB25618F091614654 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; }; 29 | /* End PBXFileReference section */ 30 | 31 | /* Begin PBXFrameworksBuildPhase section */ 32 | 1BB40EBB2294DCDF00EA9DD7 /* Frameworks */ = { 33 | isa = PBXFrameworksBuildPhase; 34 | buildActionMask = 2147483647; 35 | files = ( 36 | 41811AAD7AF038DCFC4C3704 /* Pods_Example.framework in Frameworks */, 37 | ); 38 | runOnlyForDeploymentPostprocessing = 0; 39 | }; 40 | /* End PBXFrameworksBuildPhase section */ 41 | 42 | /* Begin PBXGroup section */ 43 | 1AEECD3091A0162D1B26F4EF /* Pods */ = { 44 | isa = PBXGroup; 45 | children = ( 46 | FA47D41EB25618F091614654 /* Pods-Example.debug.xcconfig */, 47 | C985D8C5FA47E3A13E4B74E5 /* Pods-Example.release.xcconfig */, 48 | ); 49 | name = Pods; 50 | path = Pods; 51 | sourceTree = ""; 52 | }; 53 | 1BB40EB52294DCDF00EA9DD7 = { 54 | isa = PBXGroup; 55 | children = ( 56 | 1BB40EC02294DCDF00EA9DD7 /* Example */, 57 | 1BB40EBF2294DCDF00EA9DD7 /* Products */, 58 | 1AEECD3091A0162D1B26F4EF /* Pods */, 59 | 37D6E48EB8301A4DA2F42484 /* Frameworks */, 60 | ); 61 | sourceTree = ""; 62 | }; 63 | 1BB40EBF2294DCDF00EA9DD7 /* Products */ = { 64 | isa = PBXGroup; 65 | children = ( 66 | 1BB40EBE2294DCDF00EA9DD7 /* Example.app */, 67 | ); 68 | name = Products; 69 | sourceTree = ""; 70 | }; 71 | 1BB40EC02294DCDF00EA9DD7 /* Example */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | 1BB40EC12294DCDF00EA9DD7 /* AppDelegate.swift */, 75 | 1BB40EC32294DCDF00EA9DD7 /* ViewController.swift */, 76 | 1BB40EC52294DCDF00EA9DD7 /* Main.storyboard */, 77 | 1BB40EC82294DCE000EA9DD7 /* Assets.xcassets */, 78 | 1BB40ECA2294DCE000EA9DD7 /* LaunchScreen.storyboard */, 79 | 1BB40ECD2294DCE000EA9DD7 /* Info.plist */, 80 | ); 81 | path = Example; 82 | sourceTree = ""; 83 | }; 84 | 37D6E48EB8301A4DA2F42484 /* Frameworks */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | A48611BB55FC61A6379482E5 /* Pods_Example.framework */, 88 | ); 89 | name = Frameworks; 90 | sourceTree = ""; 91 | }; 92 | /* End PBXGroup section */ 93 | 94 | /* Begin PBXNativeTarget section */ 95 | 1BB40EBD2294DCDF00EA9DD7 /* Example */ = { 96 | isa = PBXNativeTarget; 97 | buildConfigurationList = 1BB40ED02294DCE000EA9DD7 /* Build configuration list for PBXNativeTarget "Example" */; 98 | buildPhases = ( 99 | 4E1F32EE928EB39DF0E45D18 /* [CP] Check Pods Manifest.lock */, 100 | 1BB40EBA2294DCDF00EA9DD7 /* Sources */, 101 | 1BB40EBB2294DCDF00EA9DD7 /* Frameworks */, 102 | 1BB40EBC2294DCDF00EA9DD7 /* Resources */, 103 | 1BB40EE82294DECD00EA9DD7 /* ShellScript */, 104 | 95AAD6C2FDE428243B5A6169 /* [CP] Embed Pods Frameworks */, 105 | ); 106 | buildRules = ( 107 | ); 108 | dependencies = ( 109 | ); 110 | name = Example; 111 | productName = Example; 112 | productReference = 1BB40EBE2294DCDF00EA9DD7 /* Example.app */; 113 | productType = "com.apple.product-type.application"; 114 | }; 115 | /* End PBXNativeTarget section */ 116 | 117 | /* Begin PBXProject section */ 118 | 1BB40EB62294DCDF00EA9DD7 /* Project object */ = { 119 | isa = PBXProject; 120 | attributes = { 121 | LastSwiftUpdateCheck = 1020; 122 | LastUpgradeCheck = 1020; 123 | ORGANIZATIONNAME = "Sagar R Kothari"; 124 | TargetAttributes = { 125 | 1BB40EBD2294DCDF00EA9DD7 = { 126 | CreatedOnToolsVersion = 10.2.1; 127 | }; 128 | }; 129 | }; 130 | buildConfigurationList = 1BB40EB92294DCDF00EA9DD7 /* Build configuration list for PBXProject "Example" */; 131 | compatibilityVersion = "Xcode 9.3"; 132 | developmentRegion = en; 133 | hasScannedForEncodings = 0; 134 | knownRegions = ( 135 | en, 136 | Base, 137 | ); 138 | mainGroup = 1BB40EB52294DCDF00EA9DD7; 139 | productRefGroup = 1BB40EBF2294DCDF00EA9DD7 /* Products */; 140 | projectDirPath = ""; 141 | projectRoot = ""; 142 | targets = ( 143 | 1BB40EBD2294DCDF00EA9DD7 /* Example */, 144 | ); 145 | }; 146 | /* End PBXProject section */ 147 | 148 | /* Begin PBXResourcesBuildPhase section */ 149 | 1BB40EBC2294DCDF00EA9DD7 /* Resources */ = { 150 | isa = PBXResourcesBuildPhase; 151 | buildActionMask = 2147483647; 152 | files = ( 153 | 1BB40ECC2294DCE000EA9DD7 /* LaunchScreen.storyboard in Resources */, 154 | 1BB40EC92294DCE000EA9DD7 /* Assets.xcassets in Resources */, 155 | 1BB40EC72294DCDF00EA9DD7 /* Main.storyboard in Resources */, 156 | ); 157 | runOnlyForDeploymentPostprocessing = 0; 158 | }; 159 | /* End PBXResourcesBuildPhase section */ 160 | 161 | /* Begin PBXShellScriptBuildPhase section */ 162 | 1BB40EE82294DECD00EA9DD7 /* ShellScript */ = { 163 | isa = PBXShellScriptBuildPhase; 164 | buildActionMask = 2147483647; 165 | files = ( 166 | ); 167 | inputFileListPaths = ( 168 | ); 169 | inputPaths = ( 170 | ); 171 | outputFileListPaths = ( 172 | ); 173 | outputPaths = ( 174 | ); 175 | runOnlyForDeploymentPostprocessing = 0; 176 | shellPath = /bin/sh; 177 | shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; 178 | }; 179 | 4E1F32EE928EB39DF0E45D18 /* [CP] Check Pods Manifest.lock */ = { 180 | isa = PBXShellScriptBuildPhase; 181 | buildActionMask = 2147483647; 182 | files = ( 183 | ); 184 | inputFileListPaths = ( 185 | ); 186 | inputPaths = ( 187 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 188 | "${PODS_ROOT}/Manifest.lock", 189 | ); 190 | name = "[CP] Check Pods Manifest.lock"; 191 | outputFileListPaths = ( 192 | ); 193 | outputPaths = ( 194 | "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt", 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 199 | showEnvVarsInLog = 0; 200 | }; 201 | 95AAD6C2FDE428243B5A6169 /* [CP] Embed Pods Frameworks */ = { 202 | isa = PBXShellScriptBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | ); 206 | inputFileListPaths = ( 207 | "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist", 208 | ); 209 | name = "[CP] Embed Pods Frameworks"; 210 | outputFileListPaths = ( 211 | "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist", 212 | ); 213 | runOnlyForDeploymentPostprocessing = 0; 214 | shellPath = /bin/sh; 215 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n"; 216 | showEnvVarsInLog = 0; 217 | }; 218 | /* End PBXShellScriptBuildPhase section */ 219 | 220 | /* Begin PBXSourcesBuildPhase section */ 221 | 1BB40EBA2294DCDF00EA9DD7 /* Sources */ = { 222 | isa = PBXSourcesBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | 1BB40EC42294DCDF00EA9DD7 /* ViewController.swift in Sources */, 226 | 1BB40EC22294DCDF00EA9DD7 /* AppDelegate.swift in Sources */, 227 | ); 228 | runOnlyForDeploymentPostprocessing = 0; 229 | }; 230 | /* End PBXSourcesBuildPhase section */ 231 | 232 | /* Begin PBXVariantGroup section */ 233 | 1BB40EC52294DCDF00EA9DD7 /* Main.storyboard */ = { 234 | isa = PBXVariantGroup; 235 | children = ( 236 | 1BB40EC62294DCDF00EA9DD7 /* Base */, 237 | ); 238 | name = Main.storyboard; 239 | sourceTree = ""; 240 | }; 241 | 1BB40ECA2294DCE000EA9DD7 /* LaunchScreen.storyboard */ = { 242 | isa = PBXVariantGroup; 243 | children = ( 244 | 1BB40ECB2294DCE000EA9DD7 /* Base */, 245 | ); 246 | name = LaunchScreen.storyboard; 247 | sourceTree = ""; 248 | }; 249 | /* End PBXVariantGroup section */ 250 | 251 | /* Begin XCBuildConfiguration section */ 252 | 1BB40ECE2294DCE000EA9DD7 /* Debug */ = { 253 | isa = XCBuildConfiguration; 254 | buildSettings = { 255 | ALWAYS_SEARCH_USER_PATHS = NO; 256 | CLANG_ANALYZER_NONNULL = YES; 257 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 258 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 259 | CLANG_CXX_LIBRARY = "libc++"; 260 | CLANG_ENABLE_MODULES = YES; 261 | CLANG_ENABLE_OBJC_ARC = YES; 262 | CLANG_ENABLE_OBJC_WEAK = YES; 263 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 264 | CLANG_WARN_BOOL_CONVERSION = YES; 265 | CLANG_WARN_COMMA = YES; 266 | CLANG_WARN_CONSTANT_CONVERSION = YES; 267 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 268 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 269 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 270 | CLANG_WARN_EMPTY_BODY = YES; 271 | CLANG_WARN_ENUM_CONVERSION = YES; 272 | CLANG_WARN_INFINITE_RECURSION = YES; 273 | CLANG_WARN_INT_CONVERSION = YES; 274 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 275 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 276 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 277 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 278 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 279 | CLANG_WARN_STRICT_PROTOTYPES = YES; 280 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 281 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 282 | CLANG_WARN_UNREACHABLE_CODE = YES; 283 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 284 | CODE_SIGN_IDENTITY = "iPhone Developer"; 285 | COPY_PHASE_STRIP = NO; 286 | DEBUG_INFORMATION_FORMAT = dwarf; 287 | ENABLE_STRICT_OBJC_MSGSEND = YES; 288 | ENABLE_TESTABILITY = YES; 289 | GCC_C_LANGUAGE_STANDARD = gnu11; 290 | GCC_DYNAMIC_NO_PIC = NO; 291 | GCC_NO_COMMON_BLOCKS = YES; 292 | GCC_OPTIMIZATION_LEVEL = 0; 293 | GCC_PREPROCESSOR_DEFINITIONS = ( 294 | "DEBUG=1", 295 | "$(inherited)", 296 | ); 297 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 298 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 299 | GCC_WARN_UNDECLARED_SELECTOR = YES; 300 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 301 | GCC_WARN_UNUSED_FUNCTION = YES; 302 | GCC_WARN_UNUSED_VARIABLE = YES; 303 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 304 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 305 | MTL_FAST_MATH = YES; 306 | ONLY_ACTIVE_ARCH = YES; 307 | SDKROOT = iphoneos; 308 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 309 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 310 | }; 311 | name = Debug; 312 | }; 313 | 1BB40ECF2294DCE000EA9DD7 /* Release */ = { 314 | isa = XCBuildConfiguration; 315 | buildSettings = { 316 | ALWAYS_SEARCH_USER_PATHS = NO; 317 | CLANG_ANALYZER_NONNULL = YES; 318 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 319 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 320 | CLANG_CXX_LIBRARY = "libc++"; 321 | CLANG_ENABLE_MODULES = YES; 322 | CLANG_ENABLE_OBJC_ARC = YES; 323 | CLANG_ENABLE_OBJC_WEAK = YES; 324 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 325 | CLANG_WARN_BOOL_CONVERSION = YES; 326 | CLANG_WARN_COMMA = YES; 327 | CLANG_WARN_CONSTANT_CONVERSION = YES; 328 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 329 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 330 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 331 | CLANG_WARN_EMPTY_BODY = YES; 332 | CLANG_WARN_ENUM_CONVERSION = YES; 333 | CLANG_WARN_INFINITE_RECURSION = YES; 334 | CLANG_WARN_INT_CONVERSION = YES; 335 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 336 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 337 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 338 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 339 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 340 | CLANG_WARN_STRICT_PROTOTYPES = YES; 341 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 342 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 343 | CLANG_WARN_UNREACHABLE_CODE = YES; 344 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 345 | CODE_SIGN_IDENTITY = "iPhone Developer"; 346 | COPY_PHASE_STRIP = NO; 347 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 348 | ENABLE_NS_ASSERTIONS = NO; 349 | ENABLE_STRICT_OBJC_MSGSEND = YES; 350 | GCC_C_LANGUAGE_STANDARD = gnu11; 351 | GCC_NO_COMMON_BLOCKS = YES; 352 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 353 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 354 | GCC_WARN_UNDECLARED_SELECTOR = YES; 355 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 356 | GCC_WARN_UNUSED_FUNCTION = YES; 357 | GCC_WARN_UNUSED_VARIABLE = YES; 358 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 359 | MTL_ENABLE_DEBUG_INFO = NO; 360 | MTL_FAST_MATH = YES; 361 | SDKROOT = iphoneos; 362 | SWIFT_COMPILATION_MODE = wholemodule; 363 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 364 | VALIDATE_PRODUCT = YES; 365 | }; 366 | name = Release; 367 | }; 368 | 1BB40ED12294DCE000EA9DD7 /* Debug */ = { 369 | isa = XCBuildConfiguration; 370 | baseConfigurationReference = FA47D41EB25618F091614654 /* Pods-Example.debug.xcconfig */; 371 | buildSettings = { 372 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 373 | CODE_SIGN_STYLE = Automatic; 374 | DEVELOPMENT_TEAM = 58LRY57FMK; 375 | INFOPLIST_FILE = Example/Info.plist; 376 | LD_RUNPATH_SEARCH_PATHS = ( 377 | "$(inherited)", 378 | "@executable_path/Frameworks", 379 | ); 380 | PRODUCT_BUNDLE_IDENTIFIER = com.sagarrkothari.Example; 381 | PRODUCT_NAME = "$(TARGET_NAME)"; 382 | SWIFT_VERSION = 5.0; 383 | TARGETED_DEVICE_FAMILY = "1,2"; 384 | }; 385 | name = Debug; 386 | }; 387 | 1BB40ED22294DCE000EA9DD7 /* Release */ = { 388 | isa = XCBuildConfiguration; 389 | baseConfigurationReference = C985D8C5FA47E3A13E4B74E5 /* Pods-Example.release.xcconfig */; 390 | buildSettings = { 391 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 392 | CODE_SIGN_STYLE = Automatic; 393 | DEVELOPMENT_TEAM = 58LRY57FMK; 394 | INFOPLIST_FILE = Example/Info.plist; 395 | LD_RUNPATH_SEARCH_PATHS = ( 396 | "$(inherited)", 397 | "@executable_path/Frameworks", 398 | ); 399 | PRODUCT_BUNDLE_IDENTIFIER = com.sagarrkothari.Example; 400 | PRODUCT_NAME = "$(TARGET_NAME)"; 401 | SWIFT_VERSION = 5.0; 402 | TARGETED_DEVICE_FAMILY = "1,2"; 403 | }; 404 | name = Release; 405 | }; 406 | /* End XCBuildConfiguration section */ 407 | 408 | /* Begin XCConfigurationList section */ 409 | 1BB40EB92294DCDF00EA9DD7 /* Build configuration list for PBXProject "Example" */ = { 410 | isa = XCConfigurationList; 411 | buildConfigurations = ( 412 | 1BB40ECE2294DCE000EA9DD7 /* Debug */, 413 | 1BB40ECF2294DCE000EA9DD7 /* Release */, 414 | ); 415 | defaultConfigurationIsVisible = 0; 416 | defaultConfigurationName = Release; 417 | }; 418 | 1BB40ED02294DCE000EA9DD7 /* Build configuration list for PBXNativeTarget "Example" */ = { 419 | isa = XCConfigurationList; 420 | buildConfigurations = ( 421 | 1BB40ED12294DCE000EA9DD7 /* Debug */, 422 | 1BB40ED22294DCE000EA9DD7 /* Release */, 423 | ); 424 | defaultConfigurationIsVisible = 0; 425 | defaultConfigurationName = Release; 426 | }; 427 | /* End XCConfigurationList section */ 428 | }; 429 | rootObject = 1BB40EB62294DCDF00EA9DD7 /* Project object */; 430 | } 431 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/xcshareddata/xcschemes/Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Example/Example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Example/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Example 4 | // 5 | // Created by sagar kothari on 22/05/19. 6 | // Copyright © 2019 Sagar R Kothari. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | var window: UIWindow? 14 | 15 | func application( 16 | _ application: UIApplication, 17 | didFinishLaunchingWithOptions 18 | launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 19 | return true 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /Example/Example/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/Example/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /Example/Example/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 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 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 | 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 | -------------------------------------------------------------------------------- /Example/Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/Example/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Example 4 | // 5 | // Created by sagar kothari on 22/05/19. 6 | // Copyright © 2019 Sagar R Kothari. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import InputViews 11 | 12 | class ViewController: UIViewController { 13 | @IBOutlet var datePicker: NoCutPasteTextField? { 14 | didSet { 15 | guard let datePicker = datePicker else { return } 16 | // Setting up input view 17 | datePicker.inputView = DatePickerInputView( 18 | mode: .dateAndTime, didSelect: { (date) in 19 | let dateFormatter = DateFormatter() 20 | dateFormatter.dateFormat = "dd-MMM-yyyy hh:mm a" 21 | datePicker.text = dateFormatter.string(from: date) 22 | }) 23 | // Setting up accessory view 24 | datePicker.inputAccessoryView = AccessoryView("Select Date", doneTapped: { 25 | datePicker.resignFirstResponder() 26 | }) 27 | } 28 | } 29 | 30 | @IBOutlet var itemPicker: NoCutPasteTextField? { 31 | didSet { 32 | guard let itemPicker = itemPicker else { return } 33 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 34 | // Setting up input view 35 | let inputView = PickerInputView(height: 250) 36 | inputView.items = { return array } 37 | inputView.didSelectAtIndex = { index in itemPicker.text = array[index] } 38 | inputView.text = { string in return string } 39 | itemPicker.inputView = inputView 40 | // Setting up accessory view 41 | itemPicker.inputAccessoryView = AccessoryView("Select item", doneTapped: { 42 | itemPicker.resignFirstResponder() 43 | }) 44 | } 45 | } 46 | 47 | @IBOutlet var itemsFromTablePicker: NoCutPasteTextField? { 48 | didSet { 49 | guard let itemsFromTablePicker = itemsFromTablePicker else { return } 50 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 51 | var selected: [String] = [] 52 | let inputView = TableInputView.init(height: 250) 53 | inputView.items = { return array } 54 | inputView.didSelect = { string in 55 | if let index = selected.firstIndex(of: string) { 56 | selected.remove(at: index) 57 | } else { 58 | selected.append(string) 59 | } 60 | itemsFromTablePicker.text = selected.joined(separator: ", ") 61 | } 62 | inputView.contains = { string in return selected.firstIndex(of: string) != nil } 63 | inputView.text = { string in return string } 64 | itemsFromTablePicker.inputView = inputView 65 | // Setting up accessory view 66 | itemsFromTablePicker.inputAccessoryView = AccessoryView("Select item", doneTapped: { 67 | itemsFromTablePicker.resignFirstResponder() 68 | }) 69 | } 70 | } 71 | 72 | @IBOutlet var itemsFromCollectionView: NoCutPasteTextField? { 73 | didSet { 74 | guard let itemsFromCollectionView = itemsFromCollectionView else { return } 75 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 76 | var selected: [String] = [] 77 | let inputView = CollectionInputView(height: 250) 78 | inputView.items = { return array } 79 | inputView.didSelect = { string in 80 | if let index = selected.firstIndex(of: string) { 81 | selected.remove(at: index) 82 | } else { 83 | selected.append(string) 84 | } 85 | itemsFromCollectionView.text = selected.joined(separator: ", ") 86 | } 87 | inputView.text = { string in return string } 88 | inputView.contains = { string in return selected.firstIndex(of: string) != nil } 89 | itemsFromCollectionView.inputView = inputView 90 | // Setting up accessory view 91 | itemsFromCollectionView.inputAccessoryView = AccessoryView("Select item", doneTapped: { 92 | itemsFromCollectionView.resignFirstResponder() 93 | }) 94 | } 95 | } 96 | 97 | @IBOutlet var pickFontAwesomeIconView: NoCutPasteTextField? { 98 | didSet { 99 | guard let pickFontAwesomeIconView = pickFontAwesomeIconView else { return } 100 | pickFontAwesomeIconView.inputView = PickFontAwesomeIconView(didSelect: { (icon) in 101 | print("Icon is \(icon)") 102 | }, height: 250) 103 | // Setting up accessory view 104 | pickFontAwesomeIconView.inputAccessoryView = AccessoryView("Select item", doneTapped: { 105 | pickFontAwesomeIconView.resignFirstResponder() 106 | }) 107 | } 108 | } 109 | 110 | @IBOutlet var colorPicker: NoCutPasteTextField? { 111 | didSet { 112 | guard let colorPicker = colorPicker else { return } 113 | var selectedColor: UIColor? 114 | colorPicker.inputView = ColorPickerView.init(didSelect: { (color) in 115 | colorPicker.backgroundColor = color 116 | selectedColor = color 117 | }, contains: { (color) in 118 | return color.isEqual(selectedColor) 119 | }, height: 250, colorSize: 30) 120 | // Setting up accessory view 121 | colorPicker.inputAccessoryView = AccessoryView("Select Color", doneTapped: { 122 | colorPicker.resignFirstResponder() 123 | }) 124 | } 125 | } 126 | 127 | override func viewDidLoad() { 128 | super.viewDidLoad() 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | platform :ios, '10.0' 3 | 4 | target 'Example' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | pod 'InputViews', :path => '../' 8 | # Pods for Example 9 | 10 | end 11 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InputViews (1.0.8): 3 | - InputViews/AccessoryView (= 1.0.8) 4 | - InputViews/CollectionInputView (= 1.0.8) 5 | - InputViews/ColorPickerView (= 1.0.8) 6 | - InputViews/DatePickerInputView (= 1.0.8) 7 | - InputViews/NoCutPasteField (= 1.0.8) 8 | - InputViews/PickerInputView (= 1.0.8) 9 | - InputViews/TableInputView (= 1.0.8) 10 | - InputViews/AccessoryView (1.0.8) 11 | - InputViews/CollectionInputView (1.0.8): 12 | - InputViews/CollectionInputView/PickFontAwesomeIconView (= 1.0.8) 13 | - InputViews/CollectionInputView/PickFontAwesomeIconView (1.0.8) 14 | - InputViews/ColorPickerView (1.0.8) 15 | - InputViews/DatePickerInputView (1.0.8) 16 | - InputViews/NoCutPasteField (1.0.8) 17 | - InputViews/PickerInputView (1.0.8) 18 | - InputViews/TableInputView (1.0.8) 19 | 20 | DEPENDENCIES: 21 | - InputViews (from `../`) 22 | 23 | EXTERNAL SOURCES: 24 | InputViews: 25 | :path: "../" 26 | 27 | SPEC CHECKSUMS: 28 | InputViews: fb6b34f1972318923f192a12a08d346751c86c5e 29 | 30 | PODFILE CHECKSUM: a2e0bf9e291bbefe92ed2d8ba7d4cef79dccd3ce 31 | 32 | COCOAPODS: 1.7.1 33 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/InputViews.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "InputViews", 3 | "version": "1.0.8", 4 | "summary": "Custom input views for UIKeyboard", 5 | "description": "Input views for UITextField show PickerView, TableView, Collection, instead of default keyboard", 6 | "homepage": "https://github.com/sag333ar/InputViews", 7 | "license": "MIT", 8 | "authors": { 9 | "Sagar Kothari": "sag333ar@gmail.com" 10 | }, 11 | "platforms": { 12 | "ios": "10.0" 13 | }, 14 | "source": { 15 | "git": "https://github.com/sag333ar/InputViews.git", 16 | "tag": "1.0.8" 17 | }, 18 | "swift_versions": "5.0", 19 | "subspecs": [ 20 | { 21 | "name": "AccessoryView", 22 | "source_files": "InputViews/AccessoryView/**/*.{swift}" 23 | }, 24 | { 25 | "name": "CollectionInputView", 26 | "source_files": "InputViews/CollectionInputView/*.{swift}", 27 | "subspecs": [ 28 | { 29 | "name": "PickFontAwesomeIconView", 30 | "resources": "InputViews/CollectionInputView/PickFontAwesomeIconView/*.{otf}", 31 | "source_files": "InputViews/CollectionInputView/**/*.{swift}" 32 | } 33 | ] 34 | }, 35 | { 36 | "name": "DatePickerInputView", 37 | "source_files": "InputViews/DatePickerInputView/**/*.{swift}" 38 | }, 39 | { 40 | "name": "ColorPickerView", 41 | "source_files": [ 42 | "InputViews/ColorPickerView/**/*.{swift}", 43 | "InputViews/CollectionInputView/CollectionInputViewCell.swift" 44 | ] 45 | }, 46 | { 47 | "name": "NoCutPasteField", 48 | "source_files": "InputViews/NoCutPasteField/**/*.{swift}" 49 | }, 50 | { 51 | "name": "PickerInputView", 52 | "source_files": "InputViews/PickerInputView/**/*.{swift}" 53 | }, 54 | { 55 | "name": "TableInputView", 56 | "source_files": "InputViews/TableInputView/**/*.{swift}" 57 | } 58 | ], 59 | "swift_version": "5.0" 60 | } 61 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InputViews (1.0.8): 3 | - InputViews/AccessoryView (= 1.0.8) 4 | - InputViews/CollectionInputView (= 1.0.8) 5 | - InputViews/ColorPickerView (= 1.0.8) 6 | - InputViews/DatePickerInputView (= 1.0.8) 7 | - InputViews/NoCutPasteField (= 1.0.8) 8 | - InputViews/PickerInputView (= 1.0.8) 9 | - InputViews/TableInputView (= 1.0.8) 10 | - InputViews/AccessoryView (1.0.8) 11 | - InputViews/CollectionInputView (1.0.8): 12 | - InputViews/CollectionInputView/PickFontAwesomeIconView (= 1.0.8) 13 | - InputViews/CollectionInputView/PickFontAwesomeIconView (1.0.8) 14 | - InputViews/ColorPickerView (1.0.8) 15 | - InputViews/DatePickerInputView (1.0.8) 16 | - InputViews/NoCutPasteField (1.0.8) 17 | - InputViews/PickerInputView (1.0.8) 18 | - InputViews/TableInputView (1.0.8) 19 | 20 | DEPENDENCIES: 21 | - InputViews (from `../`) 22 | 23 | EXTERNAL SOURCES: 24 | InputViews: 25 | :path: "../" 26 | 27 | SPEC CHECKSUMS: 28 | InputViews: fb6b34f1972318923f192a12a08d346751c86c5e 29 | 30 | PODFILE CHECKSUM: a2e0bf9e291bbefe92ed2d8ba7d4cef79dccd3ce 31 | 32 | COCOAPODS: 1.7.1 33 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1DD52C3E089B12670013C2AEC3E8E842 /* DatePickerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86861D2B981DC807D67E549534586E2C /* DatePickerInputView.swift */; }; 11 | 1FB2296D8192C7DCA0A6E1605B1FD30F /* InputViews-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A7B76E015722CA74B83EC5423E2E586 /* InputViews-dummy.m */; }; 12 | 274D2E2D28D039D2780AA4329BD8DE83 /* CollectionInputViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94830078BFF8385D3FE8BD402882F293 /* CollectionInputViewCell.swift */; }; 13 | 301FCEC0EB1103A997BED765DC96B8E2 /* AccessoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E640A489F408AE4353A20CA6F2D31FC /* AccessoryView.swift */; }; 14 | 409B875B4D4D53B917A5FF4A4A54BD78 /* ColorPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62EDA605108A10609F0B3FBD47B32A1 /* ColorPicker.swift */; }; 15 | 416B5CA916A0B39CA90A8C4B3A4F9414 /* PickFontAwesomeIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B323EF932D43636F6643D1C034615D3 /* PickFontAwesomeIconView.swift */; }; 16 | 5A065443AEA98B77615BCA08912C617D /* CollectionInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D2514F749BC8678D72A9865DB2B78 /* CollectionInputView.swift */; }; 17 | 760A616AF0C56F48678B2A8466D7ECD0 /* TableInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DB3A4EA4812A4455B8553A6616BD786 /* TableInputView.swift */; }; 18 | 7784D81B3DFAE18FF7EAD1DCAA16A5A6 /* UIFont+Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9A4417904A66DE9030A39E43AF123E /* UIFont+Custom.swift */; }; 19 | 881996747C395CD4DE01390979EB886F /* UIColor+HEX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 681083F3D9260535BB4C956FD7B78F38 /* UIColor+HEX.swift */; }; 20 | A8D1FD71AD29D470F07F2B53E9B0DA6C /* InputViews-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF20838099F474519C0B31DB9C96EB6 /* InputViews-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 21 | AA112BA5117838CA584E0FEA1B190A7D /* PickerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52CBAE1AF2D4B1DA878250348A98B760 /* PickerInputView.swift */; }; 22 | B265275D6566B8C43FDC68133DC287C1 /* Pods-Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 23 | B5875FDF02FFB356C8DEAB35282D130A /* FontAwesome5FreeSolid900.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5889CC6E37AB1518690AD7280EAA9C7F /* FontAwesome5FreeSolid900.otf */; }; 24 | C5DF6853CD1A1C1601D1470157BAE13F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 25 | CE7A5D5AF8CE707A3F988354C9BA1930 /* NoCutPasteField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0135015C9E87C9CB1DFFF0AD352B3797 /* NoCutPasteField.swift */; }; 26 | CFE315C452D14E073F43DBA7E86942AC /* Pods-Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */; }; 27 | E18DB27AFDE04D014D7EE214BA0988B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | A6741BDF50F0E171C4A8333C3C07429C /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = 5C1168CC9E16DDF4CA468B856CB0C4A1; 36 | remoteInfo = InputViews; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 0135015C9E87C9CB1DFFF0AD352B3797 /* NoCutPasteField.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NoCutPasteField.swift; path = InputViews/NoCutPasteField/NoCutPasteField.swift; sourceTree = ""; }; 42 | 1E640A489F408AE4353A20CA6F2D31FC /* AccessoryView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessoryView.swift; path = InputViews/AccessoryView/AccessoryView.swift; sourceTree = ""; }; 43 | 1F667CC0E19EAF34E5A4119E2121F585 /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Example.framework; path = "Pods-Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | 20D60AEEBCE0AC7E3BE04E6FF9E1EF60 /* InputViews-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "InputViews-Info.plist"; sourceTree = ""; }; 45 | 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.release.xcconfig"; sourceTree = ""; }; 46 | 268172AD0E2255D53993ACF457564749 /* InputViews.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = InputViews.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 47 | 2D92A0934302E1ED439011466995417D /* InputViews-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "InputViews-prefix.pch"; sourceTree = ""; }; 48 | 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-Info.plist"; sourceTree = ""; }; 49 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 50 | 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Example.modulemap"; sourceTree = ""; }; 51 | 4018EC49ABBCA0B67249CCFD9ABBD1C0 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 52 | 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Example-acknowledgements.markdown"; sourceTree = ""; }; 53 | 52CBAE1AF2D4B1DA878250348A98B760 /* PickerInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInputView.swift; path = InputViews/PickerInputView/PickerInputView.swift; sourceTree = ""; }; 54 | 5889CC6E37AB1518690AD7280EAA9C7F /* FontAwesome5FreeSolid900.otf */ = {isa = PBXFileReference; includeInIndex = 1; name = FontAwesome5FreeSolid900.otf; path = InputViews/CollectionInputView/PickFontAwesomeIconView/FontAwesome5FreeSolid900.otf; sourceTree = ""; }; 55 | 681083F3D9260535BB4C956FD7B78F38 /* UIColor+HEX.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+HEX.swift"; sourceTree = ""; }; 56 | 6A7B76E015722CA74B83EC5423E2E586 /* InputViews-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "InputViews-dummy.m"; sourceTree = ""; }; 57 | 6DB3A4EA4812A4455B8553A6616BD786 /* TableInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableInputView.swift; path = InputViews/TableInputView/TableInputView.swift; sourceTree = ""; }; 58 | 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Example-umbrella.h"; sourceTree = ""; }; 59 | 7E9A4417904A66DE9030A39E43AF123E /* UIFont+Custom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIFont+Custom.swift"; sourceTree = ""; }; 60 | 86861D2B981DC807D67E549534586E2C /* DatePickerInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DatePickerInputView.swift; path = InputViews/DatePickerInputView/DatePickerInputView.swift; sourceTree = ""; }; 61 | 8FFAA7753407A48AF6BC27BE3A09E396 /* InputViews.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = InputViews.xcconfig; sourceTree = ""; }; 62 | 94830078BFF8385D3FE8BD402882F293 /* CollectionInputViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionInputViewCell.swift; path = InputViews/CollectionInputView/CollectionInputViewCell.swift; sourceTree = ""; }; 63 | 9AF20838099F474519C0B31DB9C96EB6 /* InputViews-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "InputViews-umbrella.h"; sourceTree = ""; }; 64 | 9B323EF932D43636F6643D1C034615D3 /* PickFontAwesomeIconView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PickFontAwesomeIconView.swift; sourceTree = ""; }; 65 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 66 | A37D2514F749BC8678D72A9865DB2B78 /* CollectionInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionInputView.swift; path = InputViews/CollectionInputView/CollectionInputView.swift; sourceTree = ""; }; 67 | AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Example-frameworks.sh"; sourceTree = ""; }; 68 | B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Example.debug.xcconfig"; sourceTree = ""; }; 69 | D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Example-dummy.m"; sourceTree = ""; }; 70 | D8E08DC208297EAF945CDCF9054A7A87 /* InputViews.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = InputViews.modulemap; sourceTree = ""; }; 71 | E20836ECD0961D3A13490548DE1A8DDE /* InputViews.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = InputViews.framework; path = InputViews.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | E62EDA605108A10609F0B3FBD47B32A1 /* ColorPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ColorPicker.swift; sourceTree = ""; }; 73 | EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Example-acknowledgements.plist"; sourceTree = ""; }; 74 | FCFFB5A18FA08482D09BD93C4A84A243 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 75 | /* End PBXFileReference section */ 76 | 77 | /* Begin PBXFrameworksBuildPhase section */ 78 | 6743314B3415ED040D3A617F0D7421E7 /* Frameworks */ = { 79 | isa = PBXFrameworksBuildPhase; 80 | buildActionMask = 2147483647; 81 | files = ( 82 | C5DF6853CD1A1C1601D1470157BAE13F /* Foundation.framework in Frameworks */, 83 | ); 84 | runOnlyForDeploymentPostprocessing = 0; 85 | }; 86 | B013DEE56022ABA0E2F408FF05857E0A /* Frameworks */ = { 87 | isa = PBXFrameworksBuildPhase; 88 | buildActionMask = 2147483647; 89 | files = ( 90 | E18DB27AFDE04D014D7EE214BA0988B5 /* Foundation.framework in Frameworks */, 91 | ); 92 | runOnlyForDeploymentPostprocessing = 0; 93 | }; 94 | /* End PBXFrameworksBuildPhase section */ 95 | 96 | /* Begin PBXGroup section */ 97 | 2BD4914FE8F50F0538F6DDDAAE499999 /* PickFontAwesomeIconView */ = { 98 | isa = PBXGroup; 99 | children = ( 100 | 9B323EF932D43636F6643D1C034615D3 /* PickFontAwesomeIconView.swift */, 101 | 7E9A4417904A66DE9030A39E43AF123E /* UIFont+Custom.swift */, 102 | ); 103 | name = PickFontAwesomeIconView; 104 | path = InputViews/CollectionInputView/PickFontAwesomeIconView; 105 | sourceTree = ""; 106 | }; 107 | 2C21F1706D3D19C4EFAB6E4CA9B76F83 /* NoCutPasteField */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 0135015C9E87C9CB1DFFF0AD352B3797 /* NoCutPasteField.swift */, 111 | ); 112 | name = NoCutPasteField; 113 | sourceTree = ""; 114 | }; 115 | 5545AD247CFB91DCE0EA824642216508 /* ColorPickerView */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | E62EDA605108A10609F0B3FBD47B32A1 /* ColorPicker.swift */, 119 | 681083F3D9260535BB4C956FD7B78F38 /* UIColor+HEX.swift */, 120 | ); 121 | name = ColorPickerView; 122 | path = InputViews/ColorPickerView; 123 | sourceTree = ""; 124 | }; 125 | 5A998117D35946FD92451BBCF2BA539B /* Support Files */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | D8E08DC208297EAF945CDCF9054A7A87 /* InputViews.modulemap */, 129 | 8FFAA7753407A48AF6BC27BE3A09E396 /* InputViews.xcconfig */, 130 | 6A7B76E015722CA74B83EC5423E2E586 /* InputViews-dummy.m */, 131 | 20D60AEEBCE0AC7E3BE04E6FF9E1EF60 /* InputViews-Info.plist */, 132 | 2D92A0934302E1ED439011466995417D /* InputViews-prefix.pch */, 133 | 9AF20838099F474519C0B31DB9C96EB6 /* InputViews-umbrella.h */, 134 | ); 135 | name = "Support Files"; 136 | path = "Example/Pods/Target Support Files/InputViews"; 137 | sourceTree = ""; 138 | }; 139 | 64269F101317B2EBF3E03DA23F90BB8A /* Resources */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | 5889CC6E37AB1518690AD7280EAA9C7F /* FontAwesome5FreeSolid900.otf */, 143 | ); 144 | name = Resources; 145 | sourceTree = ""; 146 | }; 147 | 653009E8FF3D4510DEA0E80796E94ECC /* TableInputView */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | 6DB3A4EA4812A4455B8553A6616BD786 /* TableInputView.swift */, 151 | ); 152 | name = TableInputView; 153 | sourceTree = ""; 154 | }; 155 | 6A7F5F14047F1FCD145F95C6BBB084D8 /* Development Pods */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | DE32849309519624E540DDD7C0C07C6A /* InputViews */, 159 | ); 160 | name = "Development Pods"; 161 | sourceTree = ""; 162 | }; 163 | 932D887DE175C3DAA9E9DA452701DC4B /* AccessoryView */ = { 164 | isa = PBXGroup; 165 | children = ( 166 | 1E640A489F408AE4353A20CA6F2D31FC /* AccessoryView.swift */, 167 | ); 168 | name = AccessoryView; 169 | sourceTree = ""; 170 | }; 171 | 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | 35C305D3797C284E6F5BAA1D3E6F9BF8 /* Pods-Example.modulemap */, 175 | 441854E35F81731E63E53DC7E4EEAD9D /* Pods-Example-acknowledgements.markdown */, 176 | EA21B344259B58996DB73382B1B1521F /* Pods-Example-acknowledgements.plist */, 177 | D6D7C498FA339E02BD53ECB8916CEA8E /* Pods-Example-dummy.m */, 178 | AFECBC24E09D0D25F822C27BD944AFD4 /* Pods-Example-frameworks.sh */, 179 | 31C1D37707DFAA5E6A164BCC07834264 /* Pods-Example-Info.plist */, 180 | 7825A90E082A1582EB16256B0E722B3F /* Pods-Example-umbrella.h */, 181 | B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */, 182 | 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */, 183 | ); 184 | name = "Pods-Example"; 185 | path = "Target Support Files/Pods-Example"; 186 | sourceTree = ""; 187 | }; 188 | A5309DD799754B3DA9480E8BB3B88952 /* PickFontAwesomeIconView */ = { 189 | isa = PBXGroup; 190 | children = ( 191 | 2BD4914FE8F50F0538F6DDDAAE499999 /* PickFontAwesomeIconView */, 192 | 64269F101317B2EBF3E03DA23F90BB8A /* Resources */, 193 | ); 194 | name = PickFontAwesomeIconView; 195 | sourceTree = ""; 196 | }; 197 | ACA65E6BC2D4B682BB6DB4F6EA7A07FE /* Products */ = { 198 | isa = PBXGroup; 199 | children = ( 200 | E20836ECD0961D3A13490548DE1A8DDE /* InputViews.framework */, 201 | 1F667CC0E19EAF34E5A4119E2121F585 /* Pods_Example.framework */, 202 | ); 203 | name = Products; 204 | sourceTree = ""; 205 | }; 206 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 210 | ); 211 | name = iOS; 212 | sourceTree = ""; 213 | }; 214 | CB095E66EBEFC756FBF28AC406C3FE0F /* DatePickerInputView */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | 86861D2B981DC807D67E549534586E2C /* DatePickerInputView.swift */, 218 | ); 219 | name = DatePickerInputView; 220 | sourceTree = ""; 221 | }; 222 | CBF4B3A94FB44B6309DD3D00EE477AD6 /* PickerInputView */ = { 223 | isa = PBXGroup; 224 | children = ( 225 | 52CBAE1AF2D4B1DA878250348A98B760 /* PickerInputView.swift */, 226 | ); 227 | name = PickerInputView; 228 | sourceTree = ""; 229 | }; 230 | CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */ = { 231 | isa = PBXGroup; 232 | children = ( 233 | 9BDBD95ED116334D1B2835202D8D3060 /* Pods-Example */, 234 | ); 235 | name = "Targets Support Files"; 236 | sourceTree = ""; 237 | }; 238 | CE6681262C6B9834BE48B8AEF2A6E8AC /* CollectionInputView */ = { 239 | isa = PBXGroup; 240 | children = ( 241 | A37D2514F749BC8678D72A9865DB2B78 /* CollectionInputView.swift */, 242 | 94830078BFF8385D3FE8BD402882F293 /* CollectionInputViewCell.swift */, 243 | A5309DD799754B3DA9480E8BB3B88952 /* PickFontAwesomeIconView */, 244 | ); 245 | name = CollectionInputView; 246 | sourceTree = ""; 247 | }; 248 | CF1408CF629C7361332E53B88F7BD30C = { 249 | isa = PBXGroup; 250 | children = ( 251 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 252 | 6A7F5F14047F1FCD145F95C6BBB084D8 /* Development Pods */, 253 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 254 | ACA65E6BC2D4B682BB6DB4F6EA7A07FE /* Products */, 255 | CE2E825F08D3AD0FD76E6D78D7512ED0 /* Targets Support Files */, 256 | ); 257 | sourceTree = ""; 258 | }; 259 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 260 | isa = PBXGroup; 261 | children = ( 262 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 263 | ); 264 | name = Frameworks; 265 | sourceTree = ""; 266 | }; 267 | DE32849309519624E540DDD7C0C07C6A /* InputViews */ = { 268 | isa = PBXGroup; 269 | children = ( 270 | 932D887DE175C3DAA9E9DA452701DC4B /* AccessoryView */, 271 | CE6681262C6B9834BE48B8AEF2A6E8AC /* CollectionInputView */, 272 | E8A9CFDDFD7FE10EBBAAA1181DE9C255 /* ColorPickerView */, 273 | CB095E66EBEFC756FBF28AC406C3FE0F /* DatePickerInputView */, 274 | 2C21F1706D3D19C4EFAB6E4CA9B76F83 /* NoCutPasteField */, 275 | CBF4B3A94FB44B6309DD3D00EE477AD6 /* PickerInputView */, 276 | FCFF290A2CC9A4CA477E9095D6270704 /* Pod */, 277 | 5A998117D35946FD92451BBCF2BA539B /* Support Files */, 278 | 653009E8FF3D4510DEA0E80796E94ECC /* TableInputView */, 279 | ); 280 | name = InputViews; 281 | path = ../..; 282 | sourceTree = ""; 283 | }; 284 | E8A9CFDDFD7FE10EBBAAA1181DE9C255 /* ColorPickerView */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 5545AD247CFB91DCE0EA824642216508 /* ColorPickerView */, 288 | ); 289 | name = ColorPickerView; 290 | sourceTree = ""; 291 | }; 292 | FCFF290A2CC9A4CA477E9095D6270704 /* Pod */ = { 293 | isa = PBXGroup; 294 | children = ( 295 | 268172AD0E2255D53993ACF457564749 /* InputViews.podspec */, 296 | FCFFB5A18FA08482D09BD93C4A84A243 /* LICENSE */, 297 | 4018EC49ABBCA0B67249CCFD9ABBD1C0 /* README.md */, 298 | ); 299 | name = Pod; 300 | sourceTree = ""; 301 | }; 302 | /* End PBXGroup section */ 303 | 304 | /* Begin PBXHeadersBuildPhase section */ 305 | 3F9D417D5690DC30F31B0494F1AFAA64 /* Headers */ = { 306 | isa = PBXHeadersBuildPhase; 307 | buildActionMask = 2147483647; 308 | files = ( 309 | A8D1FD71AD29D470F07F2B53E9B0DA6C /* InputViews-umbrella.h in Headers */, 310 | ); 311 | runOnlyForDeploymentPostprocessing = 0; 312 | }; 313 | DC5C4C4C00FF4F39A024A69CBFA9D481 /* Headers */ = { 314 | isa = PBXHeadersBuildPhase; 315 | buildActionMask = 2147483647; 316 | files = ( 317 | B265275D6566B8C43FDC68133DC287C1 /* Pods-Example-umbrella.h in Headers */, 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | }; 321 | /* End PBXHeadersBuildPhase section */ 322 | 323 | /* Begin PBXNativeTarget section */ 324 | 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */ = { 325 | isa = PBXNativeTarget; 326 | buildConfigurationList = CA2B20DBBBDB719881FCC38DB4896DE7 /* Build configuration list for PBXNativeTarget "Pods-Example" */; 327 | buildPhases = ( 328 | DC5C4C4C00FF4F39A024A69CBFA9D481 /* Headers */, 329 | BA71923A12AF08BF6744B498409FA363 /* Sources */, 330 | B013DEE56022ABA0E2F408FF05857E0A /* Frameworks */, 331 | 19AAF473F26484A54C675A869EF89C7D /* Resources */, 332 | ); 333 | buildRules = ( 334 | ); 335 | dependencies = ( 336 | 7C439743C829F4C7A08894FBE3843CC3 /* PBXTargetDependency */, 337 | ); 338 | name = "Pods-Example"; 339 | productName = "Pods-Example"; 340 | productReference = 1F667CC0E19EAF34E5A4119E2121F585 /* Pods_Example.framework */; 341 | productType = "com.apple.product-type.framework"; 342 | }; 343 | 5C1168CC9E16DDF4CA468B856CB0C4A1 /* InputViews */ = { 344 | isa = PBXNativeTarget; 345 | buildConfigurationList = E1D767060CD7F5FABDEF7CEE6A53BEF9 /* Build configuration list for PBXNativeTarget "InputViews" */; 346 | buildPhases = ( 347 | 3F9D417D5690DC30F31B0494F1AFAA64 /* Headers */, 348 | E68099A2B184D8374BC28EEF44FBE5E7 /* Sources */, 349 | 6743314B3415ED040D3A617F0D7421E7 /* Frameworks */, 350 | C78EBF5EF5921306E289D78DE8293586 /* Resources */, 351 | ); 352 | buildRules = ( 353 | ); 354 | dependencies = ( 355 | ); 356 | name = InputViews; 357 | productName = InputViews; 358 | productReference = E20836ECD0961D3A13490548DE1A8DDE /* InputViews.framework */; 359 | productType = "com.apple.product-type.framework"; 360 | }; 361 | /* End PBXNativeTarget section */ 362 | 363 | /* Begin PBXProject section */ 364 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 365 | isa = PBXProject; 366 | attributes = { 367 | LastSwiftUpdateCheck = 1020; 368 | LastUpgradeCheck = 1020; 369 | }; 370 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 371 | compatibilityVersion = "Xcode 9.3"; 372 | developmentRegion = en; 373 | hasScannedForEncodings = 0; 374 | knownRegions = ( 375 | en, 376 | ); 377 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 378 | productRefGroup = ACA65E6BC2D4B682BB6DB4F6EA7A07FE /* Products */; 379 | projectDirPath = ""; 380 | projectRoot = ""; 381 | targets = ( 382 | 5C1168CC9E16DDF4CA468B856CB0C4A1 /* InputViews */, 383 | 0AEE99A309977BD12A049FF48AF9BA4B /* Pods-Example */, 384 | ); 385 | }; 386 | /* End PBXProject section */ 387 | 388 | /* Begin PBXResourcesBuildPhase section */ 389 | 19AAF473F26484A54C675A869EF89C7D /* Resources */ = { 390 | isa = PBXResourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | ); 394 | runOnlyForDeploymentPostprocessing = 0; 395 | }; 396 | C78EBF5EF5921306E289D78DE8293586 /* Resources */ = { 397 | isa = PBXResourcesBuildPhase; 398 | buildActionMask = 2147483647; 399 | files = ( 400 | B5875FDF02FFB356C8DEAB35282D130A /* FontAwesome5FreeSolid900.otf in Resources */, 401 | ); 402 | runOnlyForDeploymentPostprocessing = 0; 403 | }; 404 | /* End PBXResourcesBuildPhase section */ 405 | 406 | /* Begin PBXSourcesBuildPhase section */ 407 | BA71923A12AF08BF6744B498409FA363 /* Sources */ = { 408 | isa = PBXSourcesBuildPhase; 409 | buildActionMask = 2147483647; 410 | files = ( 411 | CFE315C452D14E073F43DBA7E86942AC /* Pods-Example-dummy.m in Sources */, 412 | ); 413 | runOnlyForDeploymentPostprocessing = 0; 414 | }; 415 | E68099A2B184D8374BC28EEF44FBE5E7 /* Sources */ = { 416 | isa = PBXSourcesBuildPhase; 417 | buildActionMask = 2147483647; 418 | files = ( 419 | 301FCEC0EB1103A997BED765DC96B8E2 /* AccessoryView.swift in Sources */, 420 | 5A065443AEA98B77615BCA08912C617D /* CollectionInputView.swift in Sources */, 421 | 274D2E2D28D039D2780AA4329BD8DE83 /* CollectionInputViewCell.swift in Sources */, 422 | 409B875B4D4D53B917A5FF4A4A54BD78 /* ColorPicker.swift in Sources */, 423 | 1DD52C3E089B12670013C2AEC3E8E842 /* DatePickerInputView.swift in Sources */, 424 | 1FB2296D8192C7DCA0A6E1605B1FD30F /* InputViews-dummy.m in Sources */, 425 | CE7A5D5AF8CE707A3F988354C9BA1930 /* NoCutPasteField.swift in Sources */, 426 | AA112BA5117838CA584E0FEA1B190A7D /* PickerInputView.swift in Sources */, 427 | 416B5CA916A0B39CA90A8C4B3A4F9414 /* PickFontAwesomeIconView.swift in Sources */, 428 | 760A616AF0C56F48678B2A8466D7ECD0 /* TableInputView.swift in Sources */, 429 | 881996747C395CD4DE01390979EB886F /* UIColor+HEX.swift in Sources */, 430 | 7784D81B3DFAE18FF7EAD1DCAA16A5A6 /* UIFont+Custom.swift in Sources */, 431 | ); 432 | runOnlyForDeploymentPostprocessing = 0; 433 | }; 434 | /* End PBXSourcesBuildPhase section */ 435 | 436 | /* Begin PBXTargetDependency section */ 437 | 7C439743C829F4C7A08894FBE3843CC3 /* PBXTargetDependency */ = { 438 | isa = PBXTargetDependency; 439 | name = InputViews; 440 | target = 5C1168CC9E16DDF4CA468B856CB0C4A1 /* InputViews */; 441 | targetProxy = A6741BDF50F0E171C4A8333C3C07429C /* PBXContainerItemProxy */; 442 | }; 443 | /* End PBXTargetDependency section */ 444 | 445 | /* Begin XCBuildConfiguration section */ 446 | 196DFA3E4A09A28224918543529A1885 /* Debug */ = { 447 | isa = XCBuildConfiguration; 448 | buildSettings = { 449 | ALWAYS_SEARCH_USER_PATHS = NO; 450 | CLANG_ANALYZER_NONNULL = YES; 451 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 452 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 453 | CLANG_CXX_LIBRARY = "libc++"; 454 | CLANG_ENABLE_MODULES = YES; 455 | CLANG_ENABLE_OBJC_ARC = YES; 456 | CLANG_ENABLE_OBJC_WEAK = YES; 457 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 458 | CLANG_WARN_BOOL_CONVERSION = YES; 459 | CLANG_WARN_COMMA = YES; 460 | CLANG_WARN_CONSTANT_CONVERSION = YES; 461 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 462 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 463 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 464 | CLANG_WARN_EMPTY_BODY = YES; 465 | CLANG_WARN_ENUM_CONVERSION = YES; 466 | CLANG_WARN_INFINITE_RECURSION = YES; 467 | CLANG_WARN_INT_CONVERSION = YES; 468 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 469 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 470 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 471 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 472 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 473 | CLANG_WARN_STRICT_PROTOTYPES = YES; 474 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 475 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 476 | CLANG_WARN_UNREACHABLE_CODE = YES; 477 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 478 | COPY_PHASE_STRIP = NO; 479 | DEBUG_INFORMATION_FORMAT = dwarf; 480 | ENABLE_STRICT_OBJC_MSGSEND = YES; 481 | ENABLE_TESTABILITY = YES; 482 | GCC_C_LANGUAGE_STANDARD = gnu11; 483 | GCC_DYNAMIC_NO_PIC = NO; 484 | GCC_NO_COMMON_BLOCKS = YES; 485 | GCC_OPTIMIZATION_LEVEL = 0; 486 | GCC_PREPROCESSOR_DEFINITIONS = ( 487 | "POD_CONFIGURATION_DEBUG=1", 488 | "DEBUG=1", 489 | "$(inherited)", 490 | ); 491 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 492 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 493 | GCC_WARN_UNDECLARED_SELECTOR = YES; 494 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 495 | GCC_WARN_UNUSED_FUNCTION = YES; 496 | GCC_WARN_UNUSED_VARIABLE = YES; 497 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 498 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 499 | MTL_FAST_MATH = YES; 500 | ONLY_ACTIVE_ARCH = YES; 501 | PRODUCT_NAME = "$(TARGET_NAME)"; 502 | STRIP_INSTALLED_PRODUCT = NO; 503 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 504 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 505 | SWIFT_VERSION = 5.0; 506 | SYMROOT = "${SRCROOT}/../build"; 507 | }; 508 | name = Debug; 509 | }; 510 | 1B391646AB59BB9D4D6B566C6EA9AF91 /* Release */ = { 511 | isa = XCBuildConfiguration; 512 | baseConfigurationReference = 243410B9535472556EA4BB6DBC133A0D /* Pods-Example.release.xcconfig */; 513 | buildSettings = { 514 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 515 | CLANG_ENABLE_OBJC_WEAK = NO; 516 | CODE_SIGN_IDENTITY = ""; 517 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 518 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 519 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 520 | CURRENT_PROJECT_VERSION = 1; 521 | DEFINES_MODULE = YES; 522 | DYLIB_COMPATIBILITY_VERSION = 1; 523 | DYLIB_CURRENT_VERSION = 1; 524 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 525 | INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist"; 526 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 527 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 528 | LD_RUNPATH_SEARCH_PATHS = ( 529 | "$(inherited)", 530 | "@executable_path/Frameworks", 531 | "@loader_path/Frameworks", 532 | ); 533 | MACH_O_TYPE = staticlib; 534 | MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap"; 535 | OTHER_LDFLAGS = ""; 536 | OTHER_LIBTOOLFLAGS = ""; 537 | PODS_ROOT = "$(SRCROOT)"; 538 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 539 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 540 | SDKROOT = iphoneos; 541 | SKIP_INSTALL = YES; 542 | TARGETED_DEVICE_FAMILY = "1,2"; 543 | VALIDATE_PRODUCT = YES; 544 | VERSIONING_SYSTEM = "apple-generic"; 545 | VERSION_INFO_PREFIX = ""; 546 | }; 547 | name = Release; 548 | }; 549 | 22767F035FE7270858A98EC0DD745BD1 /* Debug */ = { 550 | isa = XCBuildConfiguration; 551 | baseConfigurationReference = 8FFAA7753407A48AF6BC27BE3A09E396 /* InputViews.xcconfig */; 552 | buildSettings = { 553 | CLANG_ENABLE_OBJC_WEAK = NO; 554 | CODE_SIGN_IDENTITY = ""; 555 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 556 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 557 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 558 | CURRENT_PROJECT_VERSION = 1; 559 | DEFINES_MODULE = YES; 560 | DYLIB_COMPATIBILITY_VERSION = 1; 561 | DYLIB_CURRENT_VERSION = 1; 562 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 563 | GCC_PREFIX_HEADER = "Target Support Files/InputViews/InputViews-prefix.pch"; 564 | INFOPLIST_FILE = "Target Support Files/InputViews/InputViews-Info.plist"; 565 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 566 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 567 | LD_RUNPATH_SEARCH_PATHS = ( 568 | "$(inherited)", 569 | "@executable_path/Frameworks", 570 | "@loader_path/Frameworks", 571 | ); 572 | MODULEMAP_FILE = "Target Support Files/InputViews/InputViews.modulemap"; 573 | PRODUCT_MODULE_NAME = InputViews; 574 | PRODUCT_NAME = InputViews; 575 | SDKROOT = iphoneos; 576 | SKIP_INSTALL = YES; 577 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 578 | SWIFT_VERSION = 5.0; 579 | TARGETED_DEVICE_FAMILY = "1,2"; 580 | VERSIONING_SYSTEM = "apple-generic"; 581 | VERSION_INFO_PREFIX = ""; 582 | }; 583 | name = Debug; 584 | }; 585 | 32CD4CAF3A0DACBACA2D8FC4045BFBCD /* Release */ = { 586 | isa = XCBuildConfiguration; 587 | baseConfigurationReference = 8FFAA7753407A48AF6BC27BE3A09E396 /* InputViews.xcconfig */; 588 | buildSettings = { 589 | CLANG_ENABLE_OBJC_WEAK = NO; 590 | CODE_SIGN_IDENTITY = ""; 591 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 592 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 593 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 594 | CURRENT_PROJECT_VERSION = 1; 595 | DEFINES_MODULE = YES; 596 | DYLIB_COMPATIBILITY_VERSION = 1; 597 | DYLIB_CURRENT_VERSION = 1; 598 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 599 | GCC_PREFIX_HEADER = "Target Support Files/InputViews/InputViews-prefix.pch"; 600 | INFOPLIST_FILE = "Target Support Files/InputViews/InputViews-Info.plist"; 601 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 602 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 603 | LD_RUNPATH_SEARCH_PATHS = ( 604 | "$(inherited)", 605 | "@executable_path/Frameworks", 606 | "@loader_path/Frameworks", 607 | ); 608 | MODULEMAP_FILE = "Target Support Files/InputViews/InputViews.modulemap"; 609 | PRODUCT_MODULE_NAME = InputViews; 610 | PRODUCT_NAME = InputViews; 611 | SDKROOT = iphoneos; 612 | SKIP_INSTALL = YES; 613 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 614 | SWIFT_VERSION = 5.0; 615 | TARGETED_DEVICE_FAMILY = "1,2"; 616 | VALIDATE_PRODUCT = YES; 617 | VERSIONING_SYSTEM = "apple-generic"; 618 | VERSION_INFO_PREFIX = ""; 619 | }; 620 | name = Release; 621 | }; 622 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */ = { 623 | isa = XCBuildConfiguration; 624 | buildSettings = { 625 | ALWAYS_SEARCH_USER_PATHS = NO; 626 | CLANG_ANALYZER_NONNULL = YES; 627 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 628 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 629 | CLANG_CXX_LIBRARY = "libc++"; 630 | CLANG_ENABLE_MODULES = YES; 631 | CLANG_ENABLE_OBJC_ARC = YES; 632 | CLANG_ENABLE_OBJC_WEAK = YES; 633 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 634 | CLANG_WARN_BOOL_CONVERSION = YES; 635 | CLANG_WARN_COMMA = YES; 636 | CLANG_WARN_CONSTANT_CONVERSION = YES; 637 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 638 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 639 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 640 | CLANG_WARN_EMPTY_BODY = YES; 641 | CLANG_WARN_ENUM_CONVERSION = YES; 642 | CLANG_WARN_INFINITE_RECURSION = YES; 643 | CLANG_WARN_INT_CONVERSION = YES; 644 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 645 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 646 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 647 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 648 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 649 | CLANG_WARN_STRICT_PROTOTYPES = YES; 650 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 651 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 652 | CLANG_WARN_UNREACHABLE_CODE = YES; 653 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 654 | COPY_PHASE_STRIP = NO; 655 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 656 | ENABLE_NS_ASSERTIONS = NO; 657 | ENABLE_STRICT_OBJC_MSGSEND = YES; 658 | GCC_C_LANGUAGE_STANDARD = gnu11; 659 | GCC_NO_COMMON_BLOCKS = YES; 660 | GCC_PREPROCESSOR_DEFINITIONS = ( 661 | "POD_CONFIGURATION_RELEASE=1", 662 | "$(inherited)", 663 | ); 664 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 665 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 666 | GCC_WARN_UNDECLARED_SELECTOR = YES; 667 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 668 | GCC_WARN_UNUSED_FUNCTION = YES; 669 | GCC_WARN_UNUSED_VARIABLE = YES; 670 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 671 | MTL_ENABLE_DEBUG_INFO = NO; 672 | MTL_FAST_MATH = YES; 673 | PRODUCT_NAME = "$(TARGET_NAME)"; 674 | STRIP_INSTALLED_PRODUCT = NO; 675 | SWIFT_COMPILATION_MODE = wholemodule; 676 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 677 | SWIFT_VERSION = 5.0; 678 | SYMROOT = "${SRCROOT}/../build"; 679 | }; 680 | name = Release; 681 | }; 682 | D594B5824AB87F3264FB7F1A02A08533 /* Debug */ = { 683 | isa = XCBuildConfiguration; 684 | baseConfigurationReference = B45138496B85A072654D1D0F8EBBEDE5 /* Pods-Example.debug.xcconfig */; 685 | buildSettings = { 686 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 687 | CLANG_ENABLE_OBJC_WEAK = NO; 688 | CODE_SIGN_IDENTITY = ""; 689 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 690 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 691 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 692 | CURRENT_PROJECT_VERSION = 1; 693 | DEFINES_MODULE = YES; 694 | DYLIB_COMPATIBILITY_VERSION = 1; 695 | DYLIB_CURRENT_VERSION = 1; 696 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 697 | INFOPLIST_FILE = "Target Support Files/Pods-Example/Pods-Example-Info.plist"; 698 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 699 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 700 | LD_RUNPATH_SEARCH_PATHS = ( 701 | "$(inherited)", 702 | "@executable_path/Frameworks", 703 | "@loader_path/Frameworks", 704 | ); 705 | MACH_O_TYPE = staticlib; 706 | MODULEMAP_FILE = "Target Support Files/Pods-Example/Pods-Example.modulemap"; 707 | OTHER_LDFLAGS = ""; 708 | OTHER_LIBTOOLFLAGS = ""; 709 | PODS_ROOT = "$(SRCROOT)"; 710 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 711 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 712 | SDKROOT = iphoneos; 713 | SKIP_INSTALL = YES; 714 | TARGETED_DEVICE_FAMILY = "1,2"; 715 | VERSIONING_SYSTEM = "apple-generic"; 716 | VERSION_INFO_PREFIX = ""; 717 | }; 718 | name = Debug; 719 | }; 720 | /* End XCBuildConfiguration section */ 721 | 722 | /* Begin XCConfigurationList section */ 723 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 724 | isa = XCConfigurationList; 725 | buildConfigurations = ( 726 | 196DFA3E4A09A28224918543529A1885 /* Debug */, 727 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */, 728 | ); 729 | defaultConfigurationIsVisible = 0; 730 | defaultConfigurationName = Release; 731 | }; 732 | CA2B20DBBBDB719881FCC38DB4896DE7 /* Build configuration list for PBXNativeTarget "Pods-Example" */ = { 733 | isa = XCConfigurationList; 734 | buildConfigurations = ( 735 | D594B5824AB87F3264FB7F1A02A08533 /* Debug */, 736 | 1B391646AB59BB9D4D6B566C6EA9AF91 /* Release */, 737 | ); 738 | defaultConfigurationIsVisible = 0; 739 | defaultConfigurationName = Release; 740 | }; 741 | E1D767060CD7F5FABDEF7CEE6A53BEF9 /* Build configuration list for PBXNativeTarget "InputViews" */ = { 742 | isa = XCConfigurationList; 743 | buildConfigurations = ( 744 | 22767F035FE7270858A98EC0DD745BD1 /* Debug */, 745 | 32CD4CAF3A0DACBACA2D8FC4045BFBCD /* Release */, 746 | ); 747 | defaultConfigurationIsVisible = 0; 748 | defaultConfigurationName = Release; 749 | }; 750 | /* End XCConfigurationList section */ 751 | }; 752 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 753 | } 754 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews-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.8 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_InputViews : NSObject 3 | @end 4 | @implementation PodsDummy_InputViews 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double InputViewsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char InputViewsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews.modulemap: -------------------------------------------------------------------------------- 1 | framework module InputViews { 2 | umbrella header "InputViews-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/InputViews/InputViews.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/InputViews 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-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-Example/Pods-Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## InputViews 5 | 6 | MIT License 7 | 8 | Copyright (c) 2019 Sagar R. Kothari 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-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 | MIT License 18 | 19 | Copyright (c) 2019 Sagar R. Kothari 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | InputViews 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/InputViews/InputViews.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/InputViews.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/InputViews/InputViews.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/InputViews.framework -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Copies the bcsymbolmap files of a vendored framework 113 | install_bcsymbolmap() { 114 | local bcsymbolmap_path="$1" 115 | local destination="${BUILT_PRODUCTS_DIR}" 116 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 117 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 118 | } 119 | 120 | # Signs a framework with the provided identity 121 | code_sign_if_enabled() { 122 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 123 | # Use the current code_sign_identity 124 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 125 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 126 | 127 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 128 | code_sign_cmd="$code_sign_cmd &" 129 | fi 130 | echo "$code_sign_cmd" 131 | eval "$code_sign_cmd" 132 | fi 133 | } 134 | 135 | # Strip invalid architectures 136 | strip_invalid_archs() { 137 | binary="$1" 138 | # Get architectures for current target binary 139 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 140 | # Intersect them with the architectures we are building for 141 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 142 | # If there are no archs supported by this binary then warn the user 143 | if [[ -z "$intersected_archs" ]]; then 144 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 145 | STRIP_BINARY_RETVAL=0 146 | return 147 | fi 148 | stripped="" 149 | for arch in $binary_archs; do 150 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 151 | # Strip non-valid architectures in-place 152 | lipo -remove "$arch" -output "$binary" "$binary" 153 | stripped="$stripped $arch" 154 | fi 155 | done 156 | if [[ "$stripped" ]]; then 157 | echo "Stripped $binary of architectures:$stripped" 158 | fi 159 | STRIP_BINARY_RETVAL=1 160 | } 161 | 162 | 163 | if [[ "$CONFIGURATION" == "Debug" ]]; then 164 | install_framework "${BUILT_PRODUCTS_DIR}/InputViews/InputViews.framework" 165 | fi 166 | if [[ "$CONFIGURATION" == "Release" ]]; then 167 | install_framework "${BUILT_PRODUCTS_DIR}/InputViews/InputViews.framework" 168 | fi 169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 170 | wait 171 | fi 172 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/InputViews" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/InputViews/InputViews.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "InputViews" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Example { 2 | umbrella header "Pods-Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/InputViews" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/InputViews/InputViews.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "InputViews" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /InputViews.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod spec lint InputViews.podspec' to ensure this is a 3 | # valid spec and to remove all comments including this before submitting the spec. 4 | # 5 | # To learn more about Podspec attributes see https://docs.cocoapods.org/specification.html 6 | # To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/ 7 | # 8 | 9 | Pod::Spec.new do |spec| 10 | 11 | # ――― Spec Metadata ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | # 13 | # These will help people to find your library, and whilst it 14 | # can feel like a chore to fill in it's definitely to your advantage. The 15 | # summary should be tweet-length, and the description more in depth. 16 | # 17 | 18 | spec.name = "InputViews" 19 | spec.version = "1.0.9" 20 | spec.summary = "Custom input views for UIKeyboard" 21 | 22 | # This description is used to generate tags and improve search results. 23 | # * Think: What does it do? Why did you write it? What is the focus? 24 | # * Try to keep it short, snappy and to the point. 25 | # * Write the description between the DESC delimiters below. 26 | # * Finally, don't worry about the indent, CocoaPods strips it! 27 | spec.description = <<-DESC 28 | Input views for UITextField show PickerView, TableView, Collection, instead of default keyboard 29 | DESC 30 | 31 | spec.homepage = "https://github.com/sag333ar/InputViews" 32 | # spec.screenshots = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif" 33 | 34 | 35 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 36 | # 37 | # Licensing your code is important. See https://choosealicense.com for more info. 38 | # CocoaPods will detect a license file if there is a named LICENSE* 39 | # Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'. 40 | # 41 | 42 | spec.license = "MIT" 43 | # spec.license = { :type => "MIT", :file => "FILE_LICENSE" } 44 | 45 | 46 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 47 | # 48 | # Specify the authors of the library, with email addresses. Email addresses 49 | # of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also 50 | # accepts just a name if you'd rather not provide an email address. 51 | # 52 | # Specify a social_media_url where others can refer to, for example a twitter 53 | # profile URL. 54 | # 55 | 56 | spec.author = { "Sagar Kothari" => "sag333ar@gmail.com" } 57 | # Or just: spec.author = "Sagar Kothari" 58 | # spec.authors = { "Sagar Kothari" => "sag333ar@gmail.com" } 59 | # spec.social_media_url = "https://twitter.com/Sagar Kothari" 60 | 61 | # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 62 | # 63 | # If this Pod runs only on iOS or OS X, then specify the platform and 64 | # the deployment target. You can optionally include the target after the platform. 65 | # 66 | 67 | spec.platform = :ios 68 | spec.platform = :ios, "10.0" 69 | 70 | # When using multiple platforms 71 | # spec.ios.deployment_target = "5.0" 72 | # spec.osx.deployment_target = "10.7" 73 | # spec.watchos.deployment_target = "2.0" 74 | # spec.tvos.deployment_target = "9.0" 75 | 76 | 77 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 78 | # 79 | # Specify the location from where the source should be retrieved. 80 | # Supports git, hg, bzr, svn and HTTP. 81 | # 82 | 83 | spec.source = { :git => "https://github.com/sag333ar/InputViews.git", :tag => "#{spec.version}" } 84 | 85 | 86 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 87 | # 88 | # CocoaPods is smart about how it includes source code. For source files 89 | # giving a folder will include any swift, h, m, mm, c & cpp files. 90 | # For header files it will include any header in the folder. 91 | # Not including the public_header_files will make all headers public. 92 | # 93 | 94 | #spec.source_files = "Classes", "Classes/**/*.{h,m}" 95 | #spec.exclude_files = "Classes/Exclude" 96 | 97 | # spec.public_header_files = "Classes/**/*.h" 98 | 99 | spec.swift_version = "5.0" 100 | spec.subspec 'AccessoryView' do |subspec| 101 | subspec.source_files = 'InputViews/AccessoryView/**/*.{swift}' 102 | end 103 | spec.subspec 'CollectionInputView' do |subspec| 104 | subspec.source_files = 'InputViews/CollectionInputView/*.{swift}' 105 | subspec.subspec 'PickFontAwesomeIconView' do |subsubspec| 106 | subsubspec.resources = 'InputViews/CollectionInputView/PickFontAwesomeIconView/*.{otf}' 107 | subsubspec.source_files = 'InputViews/CollectionInputView/**/*.{swift}' 108 | end 109 | end 110 | spec.subspec 'DatePickerInputView' do |subspec| 111 | subspec.source_files = 'InputViews/DatePickerInputView/**/*.{swift}' 112 | end 113 | spec.subspec 'ColorPickerView' do |subspec| 114 | subspec.source_files = 'InputViews/ColorPickerView/**/*.{swift}', 'InputViews/CollectionInputView/CollectionInputViewCell.swift' 115 | end 116 | spec.subspec 'NoCutPasteField' do |subspec| 117 | subspec.source_files = 'InputViews/NoCutPasteField/**/*.{swift}' 118 | end 119 | spec.subspec 'PickerInputView' do |subspec| 120 | subspec.source_files = 'InputViews/PickerInputView/**/*.{swift}' 121 | end 122 | spec.subspec 'TableInputView' do |subspec| 123 | subspec.source_files = 'InputViews/TableInputView/**/*.{swift}' 124 | end 125 | 126 | 127 | # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 128 | # 129 | # A list of resources included with the Pod. These are copied into the 130 | # target bundle with a build phase script. Anything else will be cleaned. 131 | # You can preserve files from being cleaned, please don't preserve 132 | # non-essential files like tests, examples and documentation. 133 | # 134 | 135 | # spec.resource = "icon.png" 136 | # spec.resources = "Resources/*.png" 137 | 138 | # spec.preserve_paths = "FilesToSave", "MoreFilesToSave" 139 | 140 | 141 | # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 142 | # 143 | # Link your library with frameworks, or libraries. Libraries do not include 144 | # the lib prefix of their name. 145 | # 146 | 147 | # spec.framework = "SomeFramework" 148 | # spec.frameworks = "SomeFramework", "AnotherFramework" 149 | 150 | # spec.library = "iconv" 151 | # spec.libraries = "iconv", "xml2" 152 | 153 | 154 | # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 155 | # 156 | # If your library depends on compiler flags you can set them in the xcconfig hash 157 | # where they will only apply to your library. If you depend on other Podspecs 158 | # you can include multiple dependencies to ensure it works. 159 | 160 | # spec.requires_arc = true 161 | 162 | # spec.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" } 163 | # spec.dependency "JSONKit", "~> 1.4" 164 | 165 | end 166 | -------------------------------------------------------------------------------- /InputViews/AccessoryView/AccessoryView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | public class AccessoryView: UIView { 3 | let toolBar: UIToolbar = { 4 | let toolBar = UIToolbar() 5 | return toolBar 6 | }() 7 | 8 | let doneItem: UIBarButtonItem = { 9 | let doneItem = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonTapped)) 10 | return doneItem 11 | }() 12 | 13 | let addItem: UIBarButtonItem = { 14 | let addItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addButtonTapped)) 15 | return addItem 16 | }() 17 | 18 | var title = "" 19 | var doneTapped: (() -> Void)? 20 | var addTapped: (() -> Void)? 21 | var shouldShowAdd: (() -> Bool) = { return false } 22 | var height: CGFloat = 44 23 | 24 | public override init(frame: CGRect) { 25 | super.init(frame: frame) 26 | make() 27 | } 28 | 29 | public required init?(coder aDecoder: NSCoder) { 30 | super.init(coder: aDecoder) 31 | make() 32 | } 33 | 34 | public override func didMoveToWindow() { 35 | super.didMoveToWindow() 36 | toolBar.frame = bounds 37 | let flexi1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 38 | let flexi2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 39 | let title = UIBarButtonItem(title: self.title, style: .plain, target: nil, action: nil) 40 | title.isEnabled = false 41 | if shouldShowAdd() { 42 | toolBar.setItems([addItem, flexi1, title, flexi2, doneItem], animated: true) 43 | } else { 44 | toolBar.setItems([flexi1, title, flexi2, doneItem], animated: true) 45 | } 46 | } 47 | 48 | private func make() { 49 | addSubview(toolBar) 50 | NSLayoutConstraint.activate([ 51 | toolBar.leadingAnchor.constraint(equalTo: leadingAnchor), 52 | toolBar.topAnchor.constraint(equalTo: topAnchor), 53 | toolBar.widthAnchor.constraint(equalTo: widthAnchor), 54 | toolBar.heightAnchor.constraint(equalTo: heightAnchor) 55 | ]) 56 | } 57 | 58 | 59 | public required init( 60 | _ title: String = "", 61 | doneTapped: (() -> Void)? = nil, 62 | addTapped: (() -> Void)? = nil, 63 | shouldShowAdd: @escaping (() -> Bool) = { return false }, 64 | height: CGFloat = 44 65 | ) { 66 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 67 | make() 68 | self.shouldShowAdd = shouldShowAdd 69 | self.doneTapped = doneTapped 70 | self.addTapped = addTapped 71 | self.title = title 72 | self.height = height 73 | } 74 | 75 | @objc func doneButtonTapped() { 76 | doneTapped?() 77 | } 78 | 79 | @objc func addButtonTapped() { 80 | addTapped?() 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /InputViews/CollectionInputView/CollectionInputView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class CollectionInputView: UIView, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 4 | public let cellIdentifier = "Cell" 5 | let collectionView: UICollectionView = { 6 | var flowLayout: UICollectionViewFlowLayout { 7 | let flowLayout = UICollectionViewFlowLayout() 8 | flowLayout.minimumLineSpacing = 5 9 | flowLayout.minimumInteritemSpacing = 5 10 | flowLayout.sectionInset = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5) 11 | return flowLayout 12 | } 13 | let rect = CGRect(x: 0, y: 0, width: 0, height: 0) 14 | let collectionView = UICollectionView(frame: rect, collectionViewLayout: flowLayout) 15 | collectionView.backgroundColor = .white 16 | return collectionView 17 | }() 18 | 19 | public var items: (() -> [T]) = { return [] } 20 | public var didSelect: ((T) -> Void)? 21 | public var text: ((T) -> String) = { _ in return "" } 22 | public var contains: ((T) -> Bool) = {_ in return false } 23 | public var font: UIFont = .systemFont(ofSize: 15) 24 | public var itemBackgroundColor: UIColor = .groupTableViewBackground 25 | public var selectionColor: UIColor = UIView().tintColor 26 | 27 | public required init( 28 | items: @escaping (() -> [T]) = { return [] }, 29 | didSelect: ((T) -> Void)? = nil, 30 | text: @escaping ((T) -> String) = { _ in return "" }, 31 | contains: @escaping ((T) -> Bool) = {_ in return false }, 32 | font: UIFont = .systemFont(ofSize: 15), 33 | itemBackgroundColor: UIColor = .groupTableViewBackground, 34 | selectionColor: UIColor = UIView().tintColor, 35 | height: CGFloat 36 | ) { 37 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 38 | self.items = items 39 | self.didSelect = didSelect 40 | self.text = text 41 | self.contains = contains 42 | self.font = font 43 | self.itemBackgroundColor = itemBackgroundColor 44 | self.selectionColor = selectionColor 45 | translatesAutoresizingMaskIntoConstraints = false 46 | collectionView.translatesAutoresizingMaskIntoConstraints = false 47 | collectionView.register(CollectionInputViewCell.self, forCellWithReuseIdentifier: cellIdentifier) 48 | addSubview(collectionView) 49 | NSLayoutConstraint.activate([ 50 | collectionView.leadingAnchor.constraint(equalTo: leadingAnchor), 51 | collectionView.topAnchor.constraint(equalTo: topAnchor), 52 | collectionView.widthAnchor.constraint(equalTo: widthAnchor), 53 | collectionView.heightAnchor.constraint(equalTo: heightAnchor) 54 | ]) 55 | collectionView.dataSource = self 56 | collectionView.delegate = self 57 | } 58 | 59 | required init?(coder aDecoder: NSCoder) { 60 | super.init(coder: aDecoder) 61 | } 62 | 63 | override public func didMoveToWindow() { 64 | super.didMoveToWindow() 65 | layoutIfNeeded() 66 | collectionView.frame = bounds 67 | collectionView.dataSource = self 68 | collectionView.delegate = self 69 | collectionView.reloadData() 70 | } 71 | 72 | public func collectionView( 73 | _ collectionView: UICollectionView, 74 | numberOfItemsInSection section: Int) -> Int { 75 | return items().count 76 | } 77 | 78 | public func collectionView( 79 | _ collectionView: UICollectionView, 80 | cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 81 | let cell = collectionView.dequeueReusableCell( 82 | withReuseIdentifier: cellIdentifier, 83 | for: indexPath 84 | ) 85 | if let kcvc = cell as? CollectionInputViewCell { 86 | kcvc.layoutIfNeeded() 87 | kcvc.titleLabel.text = text(items()[indexPath.row]) 88 | kcvc.titleLabel.font = font 89 | if contains(items()[indexPath.row]) { 90 | kcvc.backgroundLabel.backgroundColor = selectionColor 91 | } else { 92 | kcvc.backgroundLabel.backgroundColor = itemBackgroundColor 93 | } 94 | kcvc.backgroundLabel.layer.cornerRadius = (kcvc.backgroundLabel.frame.height / 2.0) - 2.0 95 | } 96 | return cell 97 | } 98 | 99 | public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 100 | didSelect?(items()[indexPath.row]) 101 | collectionView.reloadData() 102 | } 103 | 104 | public func collectionView( 105 | _ collectionView: UICollectionView, 106 | layout collectionViewLayout: UICollectionViewLayout, 107 | sizeForItemAt indexPath: IndexPath 108 | ) -> CGSize { 109 | var size = (text(items()[indexPath.row]) as NSString) 110 | .size(withAttributes: [NSAttributedString.Key.font: font]) 111 | size.width += 15 112 | size.height = 40 113 | return size 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /InputViews/CollectionInputView/CollectionInputViewCell.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class CollectionInputViewCell: UICollectionViewCell { 4 | var titleLabel: UILabel = { 5 | let titleLabel = UILabel() 6 | titleLabel.translatesAutoresizingMaskIntoConstraints = false 7 | titleLabel.font = .systemFont(ofSize: 15) 8 | titleLabel.clipsToBounds = true 9 | titleLabel.textAlignment = .center 10 | return titleLabel 11 | }() 12 | 13 | var backgroundLabel: UILabel = { 14 | let backgroundLabel = UILabel() 15 | backgroundLabel.translatesAutoresizingMaskIntoConstraints = false 16 | backgroundLabel.clipsToBounds = true 17 | return backgroundLabel 18 | }() 19 | 20 | override init(frame: CGRect) { 21 | super.init(frame: frame) 22 | make() 23 | } 24 | 25 | private func make() { 26 | addSubview(backgroundLabel) 27 | NSLayoutConstraint.activate([ 28 | backgroundLabel.leadingAnchor.constraint(equalTo: leadingAnchor), 29 | backgroundLabel.trailingAnchor.constraint(equalTo: trailingAnchor), 30 | backgroundLabel.topAnchor.constraint(equalTo: topAnchor), 31 | backgroundLabel.bottomAnchor.constraint(equalTo: bottomAnchor) 32 | ]) 33 | addSubview(titleLabel) 34 | NSLayoutConstraint.activate([ 35 | titleLabel.leadingAnchor.constraint(equalTo: leadingAnchor), 36 | titleLabel.trailingAnchor.constraint(equalTo: trailingAnchor), 37 | titleLabel.topAnchor.constraint(equalTo: topAnchor), 38 | titleLabel.bottomAnchor.constraint(equalTo: bottomAnchor) 39 | ]) 40 | } 41 | 42 | public override func layoutIfNeeded() { 43 | super.layoutIfNeeded() 44 | backgroundLabel.layer.cornerRadius = (backgroundLabel.frame.size.height / 2.0) - 2.0 45 | } 46 | 47 | public required init?(coder aDecoder: NSCoder) { 48 | super.init(coder: aDecoder) 49 | make() 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /InputViews/CollectionInputView/PickFontAwesomeIconView/FontAwesome5FreeSolid900.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/InputViews/CollectionInputView/PickFontAwesomeIconView/FontAwesome5FreeSolid900.otf -------------------------------------------------------------------------------- /InputViews/CollectionInputView/PickFontAwesomeIconView/PickFontAwesomeIconView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class PickFontAwesomeIconView: UIView { 4 | public static let icons = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""] 5 | 6 | public var didSelect: ((String) -> Void)? 7 | public var itemBackgroundColor: UIColor = .groupTableViewBackground 8 | public var selectionColor: UIColor = UIView().tintColor 9 | public var iconSize: CGFloat = 30 10 | private var collectionView: CollectionInputView? 11 | 12 | required init?(coder aDecoder: NSCoder) { 13 | super.init(coder: aDecoder) 14 | } 15 | 16 | public required init( 17 | itemBackgroundColor: UIColor = .groupTableViewBackground, 18 | selectionColor: UIColor = UIView().tintColor, 19 | didSelect: ((String) -> Void)?, 20 | height: CGFloat, 21 | iconSize: CGFloat = 30 22 | ) { 23 | let registered = UIFont.registerFont( 24 | bundle: Bundle(for: type(of: self)), 25 | fontName: "FontAwesome5FreeSolid900", 26 | fontExtension: "otf" 27 | ) 28 | print(registered ? "Font registered" : "Failed") 29 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 30 | let font = UIFont(name: "FontAwesome5Free-Solid", size: iconSize) 31 | self.itemBackgroundColor = itemBackgroundColor 32 | self.selectionColor = selectionColor 33 | self.didSelect = didSelect 34 | translatesAutoresizingMaskIntoConstraints = false 35 | var selectedIcon = "" 36 | self.collectionView = CollectionInputView( 37 | items: { () -> [String] in return PickFontAwesomeIconView.icons }, 38 | didSelect: { icon in selectedIcon = icon; self.didSelect?(icon) }, 39 | text: { icon in return icon }, 40 | contains: { icon in return selectedIcon == icon }, 41 | font: font ?? UIFont.systemFont(ofSize: iconSize), 42 | itemBackgroundColor: itemBackgroundColor, 43 | selectionColor: selectionColor, height: height 44 | ) 45 | self.collectionView!.translatesAutoresizingMaskIntoConstraints = false 46 | addSubview(collectionView!) 47 | NSLayoutConstraint.activate([ 48 | self.collectionView!.leadingAnchor.constraint(equalTo: leadingAnchor), 49 | self.collectionView!.trailingAnchor.constraint(equalTo: trailingAnchor), 50 | self.collectionView!.topAnchor.constraint(equalTo: topAnchor), 51 | self.collectionView!.bottomAnchor.constraint(equalTo: bottomAnchor) 52 | ]) 53 | } 54 | 55 | override public func didMoveToWindow() { 56 | super.didMoveToWindow() 57 | layoutIfNeeded() 58 | collectionView?.frame = bounds 59 | collectionView?.collectionView.reloadData() 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /InputViews/CollectionInputView/PickFontAwesomeIconView/UIFont+Custom.swift: -------------------------------------------------------------------------------- 1 | public extension UIFont { 2 | static func registerFont(bundle: Bundle, fontName: String, fontExtension: String) -> Bool { 3 | guard let fontURL = bundle.url(forResource: fontName, withExtension: fontExtension) else { 4 | fatalError("Couldn't find font \(fontName)") 5 | } 6 | 7 | guard let fontDataProvider = CGDataProvider(url: fontURL as CFURL) else { 8 | fatalError("Couldn't load data from the font \(fontName)") 9 | } 10 | 11 | guard let font = CGFont(fontDataProvider) else { 12 | fatalError("Couldn't create font from data") 13 | } 14 | 15 | var error: Unmanaged? 16 | let success = CTFontManagerRegisterGraphicsFont(font, &error) 17 | guard success else { 18 | print("Error registering font: \(fontName) maybe it was already registered.") 19 | return false 20 | } 21 | 22 | return true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /InputViews/ColorPickerView/ColorPicker.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class ColorPickerView: UIView, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout { 4 | public static let defaultHexColors = ["FFCDD2", "F8BBD0", "E1BEE7", "EF9A9A", "F48FB1", "CE93D8", "FF8A80", "FF80AB", "EA80FC", "D1C4E9", "C5CAE9", "BBDEFB", "B39DDB", "9FA8DA", "90CAF9", "B388FF", "8C9EFF", "82B1FF", "7C4DFF", "536DFE", "448AFF", "B3E5FC", "B2EBF2", "B2DFDB", "81D4FA", "80DEEA", "80CBC4", "80D8FF", "84FFFF", "A7FFEB", "40C4FF", "18FFFF", "64FFDA", "C8E6C9", "DCEDC8", "F0F4C3", "A5D6A7", "C5E1A5", "E6EE9C", "B9F6CA", "CCFF90", "F4FF81", "69F0AE", "B2FF59", "EEFF41", "FFF9C4", "FFECB3", "FFE0B2", "FFF59D", "FFE082", "FFCC80", "FFFF8D", "FFE57F", "FFD180", "FFCCBC", "D7CCC8", "F5F5F5", "FF9E80", "CFD8DC", "B0BEC5"] 5 | 6 | public let cellIdentifier = "Cell" 7 | let collectionView: UICollectionView = { 8 | var flowLayout: UICollectionViewFlowLayout { 9 | let flowLayout = UICollectionViewFlowLayout() 10 | flowLayout.minimumLineSpacing = 5 11 | flowLayout.minimumInteritemSpacing = 5 12 | flowLayout.sectionInset = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5) 13 | return flowLayout 14 | } 15 | let rect = CGRect(x: 0, y: 0, width: 0, height: 0) 16 | let collectionView = UICollectionView(frame: rect, collectionViewLayout: flowLayout) 17 | collectionView.backgroundColor = .white 18 | return collectionView 19 | }() 20 | 21 | public var items: (() -> [UIColor]) = { 22 | return ColorPickerView.defaultHexColors.map { UIColor(hexString: $0) }.compactMap { $0 } 23 | } 24 | public var didSelect: ((UIColor) -> Void)? 25 | public var contains: ((UIColor) -> Bool) = {_ in return false } 26 | public var selectionColor: UIColor = .black 27 | public var colorSize: CGFloat = 20.0 28 | 29 | public required init( 30 | items: @escaping (() -> [UIColor]) = { return ColorPickerView.defaultHexColors.map { UIColor(hexString: $0) }.compactMap { $0 } }, 31 | didSelect: ((UIColor) -> Void)? = nil, 32 | contains: @escaping ((UIColor) -> Bool) = {_ in return false }, 33 | selectionColor: UIColor = .black, 34 | height: CGFloat, 35 | colorSize: CGFloat = 20.0 36 | ) { 37 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 38 | self.items = items 39 | self.didSelect = didSelect 40 | self.contains = contains 41 | self.selectionColor = selectionColor 42 | self.colorSize = colorSize 43 | translatesAutoresizingMaskIntoConstraints = false 44 | collectionView.translatesAutoresizingMaskIntoConstraints = false 45 | collectionView.register(CollectionInputViewCell.self, forCellWithReuseIdentifier: cellIdentifier) 46 | addSubview(collectionView) 47 | NSLayoutConstraint.activate([ 48 | collectionView.leadingAnchor.constraint(equalTo: leadingAnchor), 49 | collectionView.topAnchor.constraint(equalTo: topAnchor), 50 | collectionView.widthAnchor.constraint(equalTo: widthAnchor), 51 | collectionView.heightAnchor.constraint(equalTo: heightAnchor) 52 | ]) 53 | collectionView.dataSource = self 54 | collectionView.delegate = self 55 | } 56 | 57 | required init?(coder aDecoder: NSCoder) { 58 | super.init(coder: aDecoder) 59 | } 60 | 61 | override public func didMoveToWindow() { 62 | super.didMoveToWindow() 63 | layoutIfNeeded() 64 | collectionView.frame = bounds 65 | collectionView.dataSource = self 66 | collectionView.delegate = self 67 | collectionView.reloadData() 68 | } 69 | 70 | public func collectionView( 71 | _ collectionView: UICollectionView, 72 | numberOfItemsInSection section: Int) -> Int { 73 | return items().count 74 | } 75 | 76 | public func collectionView( 77 | _ collectionView: UICollectionView, 78 | cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 79 | let cell = collectionView.dequeueReusableCell( 80 | withReuseIdentifier: cellIdentifier, 81 | for: indexPath 82 | ) 83 | if let kcvc = cell as? CollectionInputViewCell { 84 | kcvc.layoutIfNeeded() 85 | kcvc.titleLabel.text = "" 86 | kcvc.backgroundColor = .clear 87 | kcvc.backgroundLabel.backgroundColor = items()[indexPath.row] 88 | kcvc.backgroundLabel.layer.borderWidth = 1 89 | kcvc.backgroundLabel.layer.borderColor = contains(items()[indexPath.row]) 90 | ? selectionColor.cgColor : UIColor.clear.cgColor 91 | kcvc.backgroundLabel.layer.cornerRadius = (kcvc.backgroundLabel.frame.height / 2.0) 92 | } 93 | return cell 94 | } 95 | 96 | public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 97 | didSelect?(items()[indexPath.row]) 98 | collectionView.reloadData() 99 | } 100 | 101 | public func collectionView( 102 | _ collectionView: UICollectionView, 103 | layout collectionViewLayout: UICollectionViewLayout, 104 | sizeForItemAt indexPath: IndexPath 105 | ) -> CGSize { 106 | return CGSize(width: colorSize, height: colorSize) 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /InputViews/ColorPickerView/UIColor+HEX.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public extension UIColor { 4 | convenience init?(hexString: String) { 5 | var chars = Array(hexString.hasPrefix("#") ? hexString.dropFirst() : hexString[...]) 6 | let red, green, blue, alpha: CGFloat 7 | switch chars.count { 8 | case 3: 9 | chars = chars.flatMap { [$0, $0] } 10 | fallthrough 11 | case 6: 12 | chars = ["F","F"] + chars 13 | fallthrough 14 | case 8: 15 | alpha = CGFloat(strtoul(String(chars[0...1]), nil, 16)) / 255 16 | red = CGFloat(strtoul(String(chars[2...3]), nil, 16)) / 255 17 | green = CGFloat(strtoul(String(chars[4...5]), nil, 16)) / 255 18 | blue = CGFloat(strtoul(String(chars[6...7]), nil, 16)) / 255 19 | default: 20 | return nil 21 | } 22 | self.init(red: red, green: green, blue: blue, alpha: alpha) 23 | } 24 | 25 | var hexString: String { 26 | var r: CGFloat = 0 27 | var g: CGFloat = 0 28 | var b: CGFloat = 0 29 | var a: CGFloat = 0 30 | getRed(&r, green: &g, blue: &b, alpha: &a) 31 | let rgb: Int = (Int)(r * 255) << 16 | (Int)(g * 255) << 8 | (Int)(b * 255) << 0 32 | return String(format: "#%06x", rgb) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /InputViews/DatePickerInputView/DatePickerInputView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class DatePickerInputView: UIView { 4 | var didSelect: ((Date) -> Void)? 5 | let pickerView: UIDatePicker = { 6 | let pickerView = UIDatePicker() 7 | pickerView.translatesAutoresizingMaskIntoConstraints = false 8 | return pickerView 9 | }() 10 | 11 | public required init?(coder aDecoder: NSCoder) { 12 | super.init(coder: aDecoder) 13 | } 14 | 15 | public override func didMoveToWindow() { 16 | super.didMoveToWindow() 17 | pickerView.frame = bounds 18 | pickerView.date = Date() 19 | } 20 | 21 | public required init( 22 | mode: UIDatePicker.Mode, 23 | didSelect: ((Date) -> Void)? = nil 24 | ) { 25 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 250)) 26 | self.didSelect = didSelect 27 | self.pickerView.datePickerMode = mode 28 | self.pickerView.addTarget(self, action: #selector(didChangeTheDate), for: .valueChanged) 29 | translatesAutoresizingMaskIntoConstraints = false 30 | addSubview(pickerView) 31 | NSLayoutConstraint.activate([ 32 | pickerView.leadingAnchor.constraint(equalTo: leadingAnchor), 33 | pickerView.topAnchor.constraint(equalTo: topAnchor), 34 | pickerView.widthAnchor.constraint(equalTo: widthAnchor), 35 | pickerView.heightAnchor.constraint(equalTo: heightAnchor) 36 | ]) 37 | pickerView.backgroundColor = .white 38 | } 39 | 40 | @objc func didChangeTheDate() { 41 | didSelect?(pickerView.date) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /InputViews/NoCutPasteField/NoCutPasteField.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class NoCutPasteTextField: UITextField { 4 | public override func target(forAction action: Selector, withSender sender: Any?) -> Any? { 5 | if action == #selector(UIResponderStandardEditActions.paste(_:)) 6 | || 7 | action == #selector(UIResponderStandardEditActions.cut(_:)) { 8 | return nil 9 | } 10 | return super.target(forAction: action, withSender: sender) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /InputViews/PickerInputView/PickerInputView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class PickerInputView: UIView, UIPickerViewDataSource, UIPickerViewDelegate { 4 | var selectedIndex = 0 5 | public var didSelectAtIndex: ((Int) -> Void)? 6 | public var items: (() -> [T]) = { return [] } 7 | public var text: ((T) -> String) = { _ in return "" } 8 | 9 | let pickerView: UIPickerView = { 10 | let pickerView = UIPickerView() 11 | pickerView.translatesAutoresizingMaskIntoConstraints = false 12 | return pickerView 13 | }() 14 | 15 | public required init?(coder aDecoder: NSCoder) { 16 | super.init(coder: aDecoder) 17 | } 18 | 19 | public override func didMoveToWindow() { 20 | super.didMoveToWindow() 21 | pickerView.frame = bounds 22 | pickerView.backgroundColor = .white 23 | backgroundColor = .white 24 | pickerView.reloadAllComponents() 25 | } 26 | 27 | public required init( 28 | items: @escaping (() -> [T]) = { return [] }, 29 | text: @escaping ((T) -> String) = { _ in return "" }, 30 | didSelectAtIndex: ((Int) -> Void)? = nil, 31 | height: CGFloat 32 | ) { 33 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 34 | self.didSelectAtIndex = didSelectAtIndex 35 | self.items = items 36 | self.text = text 37 | translatesAutoresizingMaskIntoConstraints = false 38 | addSubview(pickerView) 39 | NSLayoutConstraint.activate([ 40 | pickerView.leadingAnchor.constraint(equalTo: leadingAnchor), 41 | pickerView.topAnchor.constraint(equalTo: topAnchor), 42 | pickerView.widthAnchor.constraint(equalTo: widthAnchor), 43 | pickerView.heightAnchor.constraint(equalTo: heightAnchor) 44 | ]) 45 | pickerView.dataSource = self 46 | pickerView.delegate = self 47 | } 48 | 49 | public func numberOfComponents(in pickerView: UIPickerView) -> Int { 50 | return 1 51 | } 52 | 53 | public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 54 | return items().count 55 | } 56 | 57 | public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 58 | return text(items()[row]) 59 | } 60 | 61 | public func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 62 | selectedIndex = row 63 | didSelectAtIndex?(row) 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /InputViews/TableInputView/TableInputView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | public class TableInputView: UIView, UITableViewDataSource, UITableViewDelegate { 4 | let cellIdentifier = "Cell" 5 | let tableView: UITableView = { 6 | let tableView = UITableView() 7 | tableView.translatesAutoresizingMaskIntoConstraints = false 8 | return tableView 9 | }() 10 | 11 | public var items: (() -> [T]) = { return [] } 12 | public var didSelect: ((T) -> Void)? 13 | public var text: ((T) -> String) = { _ in return "" } 14 | public var contains: ((T) -> Bool) = {_ in return false } 15 | public var font: UIFont = .systemFont(ofSize: 15) 16 | 17 | public required init?(coder aDecoder: NSCoder) { 18 | super.init(coder: aDecoder) 19 | } 20 | 21 | public override func didMoveToWindow() { 22 | super.didMoveToWindow() 23 | tableView.frame = bounds 24 | tableView.dataSource = self 25 | tableView.delegate = self 26 | tableView.reloadData() 27 | } 28 | 29 | public required init( 30 | items: @escaping (() -> [T]) = { return [] }, 31 | didSelect: ((T) -> Void)? = nil, 32 | text: @escaping ((T) -> String) = { _ in return "" }, 33 | contains: @escaping ((T) -> Bool) = {_ in return false }, 34 | height: CGFloat, 35 | font: UIFont = .systemFont(ofSize: 15) 36 | ) { 37 | super.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: height)) 38 | self.items = items 39 | self.didSelect = didSelect 40 | self.text = text 41 | self.contains = contains 42 | self.font = font 43 | translatesAutoresizingMaskIntoConstraints = false 44 | tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellIdentifier) 45 | tableView.estimatedRowHeight = 44 46 | tableView.rowHeight = UITableView.automaticDimension 47 | addSubview(tableView) 48 | NSLayoutConstraint.activate([ 49 | tableView.leadingAnchor.constraint(equalTo: leadingAnchor), 50 | tableView.topAnchor.constraint(equalTo: topAnchor), 51 | tableView.widthAnchor.constraint(equalTo: widthAnchor), 52 | tableView.heightAnchor.constraint(equalTo: heightAnchor) 53 | ]) 54 | } 55 | 56 | public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 57 | return items().count 58 | } 59 | 60 | public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 61 | let cell = tableView.dequeueReusableCell( 62 | withIdentifier: cellIdentifier, 63 | for: indexPath 64 | ) 65 | let currentText = items()[indexPath.row] 66 | cell.textLabel?.font = font 67 | cell.textLabel?.text = text(currentText) 68 | cell.textLabel?.numberOfLines = 0 69 | cell.accessoryType = contains(currentText) ? .checkmark : .none 70 | cell.selectionStyle = .none 71 | return cell 72 | } 73 | 74 | public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 75 | tableView.deselectRow(at: indexPath, animated: false) 76 | let currentText = items()[indexPath.row] 77 | didSelect?(currentText) 78 | tableView.reloadData() 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Sagar R. Kothari 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![InputViews Title](assets/inputViews.png) 2 | 3 | | Example1 | Example2 | Example3 | 4 | |------------|------------|------------| 5 | | ![DatePicker](assets/DatePicker.gif) | ![ItemPicker](assets/ItemPicker.gif) | ![ItemsPicker](assets/ItemsPicker.gif) | 6 | | Example4 | Example5 | Example6 | 7 | | ![ItemsPicker](assets/CollectionItemsPicker.gif) | ![IconPicker](assets/Pick_Font_Awesome_Solid_Icon.gif) | ![ColorPicker](assets/Pick_color.gif) | 8 | 9 | # InputViews 10 | 11 | > Input views for UITextField show PickerView, TableView, Collection, instead of default keyboard 12 | 13 | ![Pod](https://cocoapod-badges.herokuapp.com/v/InputViews/badge.png) 14 | ![Platform](https://cocoapod-badges.herokuapp.com/p/InputViews/badge.png) 15 | ![License](https://cocoapod-badges.herokuapp.com/l/InputViews/badge.png) 16 | 17 | It helps you convert ordinary `UITextfield` to item picker of multiple style. 18 | 19 | ## Features 20 | 21 | - [x] Date Picker (Example1) 22 | - [x] Item Picker using `UIPickerView` (Example2) 23 | - [x] Item Picker using `UITableView` (Example3) 24 | - [x] Item Picker using `UICollectionView` (Example4) 25 | - [x] Quick `AccessoryView` with done button (All examples with done button toolbar) 26 | - [x] Font Awesome Icon Picker (Example5) 27 | - [x] UIColor Picker (Example6) 28 | 29 | ## Requirements 30 | 31 | - iOS 10.0+ 32 | - Xcode 10.2.1+ 33 | 34 | ## Installation 35 | 36 | #### CocoaPods 37 | You can use [CocoaPods](http://cocoapods.org/) to install `InputViews` by adding it to your `Podfile`: 38 | 39 | ```ruby 40 | platform :ios, '10.0' 41 | use_frameworks! 42 | pod 'InputViews' 43 | ``` 44 | 45 | To get the full benefits import `InputViews` wherever you import UIKit 46 | 47 | ``` swift 48 | import UIKit 49 | import InputViews 50 | ``` 51 | 52 | ## Usage Guide 53 | 54 | ### Date Picker (Example1) 55 | 56 | ```swift 57 | @IBOutlet var datePicker: NoCutPasteTextField? { 58 | didSet { 59 | guard let datePicker = datePicker else { return } 60 | // Setting up input view 61 | datePicker.inputView = DatePickerInputView( 62 | mode: .dateAndTime, didSelect: { (date) in 63 | let dateFormatter = DateFormatter() 64 | dateFormatter.dateFormat = "dd-MMM-yyyy hh:mm a" 65 | datePicker.text = dateFormatter.string(from: date) 66 | }) 67 | // Setting up accessory view 68 | datePicker.inputAccessoryView = AccessoryView("Select Date", doneTapped: { 69 | datePicker.resignFirstResponder() 70 | }) 71 | } 72 | } 73 | ``` 74 | 75 | ### Item picker with `UIPickerView` (Example2) 76 | 77 | ```swift 78 | @IBOutlet var itemPicker: NoCutPasteTextField? { 79 | didSet { 80 | guard let itemPicker = itemPicker else { return } 81 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 82 | // Setting up input view 83 | let inputView = PickerInputView(height: 250) 84 | inputView.items = { return array } 85 | inputView.didSelectAtIndex = { index in itemPicker.text = array[index] } 86 | inputView.text = { string in return string } 87 | itemPicker.inputView = inputView 88 | // Setting up accessory view 89 | itemPicker.inputAccessoryView = AccessoryView("Select item", doneTapped: { 90 | itemPicker.resignFirstResponder() 91 | }) 92 | } 93 | } 94 | ``` 95 | 96 | ### Items picker with `UITableView` (Example3) 97 | 98 | ```swift 99 | @IBOutlet var itemsFromTablePicker: NoCutPasteTextField? { 100 | didSet { 101 | guard let itemsFromTablePicker = itemsFromTablePicker else { return } 102 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 103 | var selected: [String] = [] 104 | let inputView = TableInputView.init(height: 250) 105 | inputView.items = { return array } 106 | inputView.didSelect = { string in 107 | if let index = selected.firstIndex(of: string) { 108 | selected.remove(at: index) 109 | } else { 110 | selected.append(string) 111 | } 112 | itemsFromTablePicker.text = selected.joined(separator: ", ") 113 | } 114 | inputView.contains = { string in return selected.firstIndex(of: string) != nil } 115 | inputView.text = { string in return string } 116 | itemsFromTablePicker.inputView = inputView 117 | // Setting up accessory view 118 | itemsFromTablePicker.inputAccessoryView = AccessoryView("Select item", doneTapped: { 119 | itemsFromTablePicker.resignFirstResponder() 120 | }) 121 | } 122 | } 123 | ``` 124 | 125 | ### Items picker with `UICollectionView` (Example4) 126 | 127 | ```swift 128 | @IBOutlet var itemsFromCollectionView: NoCutPasteTextField? { 129 | didSet { 130 | guard let itemsFromCollectionView = itemsFromCollectionView else { return } 131 | let array = ["First item", "Second item", "Third item", "Fourth item", "Fifth", "and sixth"] 132 | var selected: [String] = [] 133 | let inputView = CollectionInputView(height: 250) 134 | inputView.items = { return array } 135 | inputView.didSelect = { string in 136 | if let index = selected.firstIndex(of: string) { 137 | selected.remove(at: index) 138 | } else { 139 | selected.append(string) 140 | } 141 | itemsFromCollectionView.text = selected.joined(separator: ", ") 142 | } 143 | inputView.text = { string in return string } 144 | inputView.contains = { string in return selected.firstIndex(of: string) != nil } 145 | itemsFromCollectionView.inputView = inputView 146 | // Setting up accessory view 147 | itemsFromCollectionView.inputAccessoryView = AccessoryView("Select item", doneTapped: { 148 | itemsFromCollectionView.resignFirstResponder() 149 | }) 150 | } 151 | } 152 | ``` 153 | 154 | ### Pick Font Awesome Icon (Example5) 155 | 156 | ```swift 157 | @IBOutlet var pickFontAwesomeIconView: NoCutPasteTextField? { 158 | didSet { 159 | guard let pickFontAwesomeIconView = pickFontAwesomeIconView else { return } 160 | pickFontAwesomeIconView.inputView = PickFontAwesomeIconView(didSelect: { (icon) in 161 | print("Icon is \(icon)") 162 | }, height: 250) 163 | // Setting up accessory view 164 | pickFontAwesomeIconView.inputAccessoryView = AccessoryView("Select item", doneTapped: { 165 | pickFontAwesomeIconView.resignFirstResponder() 166 | }) 167 | } 168 | } 169 | ``` 170 | 171 | ### Pick UIColor (Example6) 172 | 173 | ```swift 174 | @IBOutlet var colorPicker: NoCutPasteTextField? { 175 | didSet { 176 | guard let colorPicker = colorPicker else { return } 177 | var selectedColor: UIColor? 178 | colorPicker.inputView = ColorPickerView.init(didSelect: { (color) in 179 | colorPicker.backgroundColor = color 180 | selectedColor = color 181 | }, contains: { (color) in 182 | return color.isEqual(selectedColor) 183 | }, height: 250, colorSize: 30) 184 | // Setting up accessory view 185 | colorPicker.inputAccessoryView = AccessoryView("Select Color", doneTapped: { 186 | colorPicker.resignFirstResponder() 187 | }) 188 | } 189 | } 190 | ``` -------------------------------------------------------------------------------- /assets/CollectionItemsPicker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/CollectionItemsPicker.gif -------------------------------------------------------------------------------- /assets/DatePicker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/DatePicker.gif -------------------------------------------------------------------------------- /assets/ItemPicker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/ItemPicker.gif -------------------------------------------------------------------------------- /assets/ItemsPicker.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/ItemsPicker.gif -------------------------------------------------------------------------------- /assets/Pick_Font_Awesome_Solid_Icon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/Pick_Font_Awesome_Solid_Icon.gif -------------------------------------------------------------------------------- /assets/Pick_color.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/Pick_color.gif -------------------------------------------------------------------------------- /assets/inputViews.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sag333ar/InputViews/a3b8f284a75cd17e357f0d368f136457292b0347/assets/inputViews.png --------------------------------------------------------------------------------