├── .gitignore
├── .swift-version
├── LICENSE
├── README.md
├── TCPickerView.podspec
├── TCPickerView
├── 0.1.9
│ └── TCPickerView.podspec
├── Example
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ │ ├── Local Podspecs
│ │ │ └── TCPickerView.podspec.json
│ │ ├── Manifest.lock
│ │ ├── Pods.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ └── xcuserdata
│ │ │ │ └── taraschernyshenko.xcuserdatad
│ │ │ │ └── xcschemes
│ │ │ │ ├── Pods-TCPickerViewExample.xcscheme
│ │ │ │ ├── TCPickerView-TCPickerView.xcscheme
│ │ │ │ ├── TCPickerView.xcscheme
│ │ │ │ └── xcschememanagement.plist
│ │ └── Target Support Files
│ │ │ ├── Pods-TCPickerViewExample
│ │ │ ├── Info.plist
│ │ │ ├── Pods-TCPickerViewExample-acknowledgements.markdown
│ │ │ ├── Pods-TCPickerViewExample-acknowledgements.plist
│ │ │ ├── Pods-TCPickerViewExample-dummy.m
│ │ │ ├── Pods-TCPickerViewExample-frameworks.sh
│ │ │ ├── Pods-TCPickerViewExample-resources.sh
│ │ │ ├── Pods-TCPickerViewExample-umbrella.h
│ │ │ ├── Pods-TCPickerViewExample.debug.xcconfig
│ │ │ ├── Pods-TCPickerViewExample.modulemap
│ │ │ └── Pods-TCPickerViewExample.release.xcconfig
│ │ │ └── TCPickerView
│ │ │ ├── Info.plist
│ │ │ ├── ResourceBundle-TCPickerView-Info.plist
│ │ │ ├── TCPickerView-dummy.m
│ │ │ ├── TCPickerView-prefix.pch
│ │ │ ├── TCPickerView-umbrella.h
│ │ │ ├── TCPickerView.modulemap
│ │ │ └── TCPickerView.xcconfig
│ ├── TCPickerView
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── andrew.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── andrew.png
│ │ │ └── checkmark_icon.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── checkmark_icon.png
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── DarkViewController.swift
│ │ ├── Images
│ │ │ ├── PickerView_1.gif
│ │ │ └── PickerView_2.png
│ │ ├── Info.plist
│ │ ├── LightViewController.swift
│ │ ├── View
│ │ │ ├── ExampleTableViewCell.swift
│ │ │ └── ExampleTableViewCell.xib
│ │ └── ViewController.swift
│ ├── TCPickerViewExample.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcuserdata
│ │ │ │ └── taraschernyshenko.xcuserdatad
│ │ │ │ └── UserInterfaceState.xcuserstate
│ │ └── xcuserdata
│ │ │ └── taraschernyshenko.xcuserdatad
│ │ │ ├── xcdebugger
│ │ │ └── Breakpoints_v2.xcbkptlist
│ │ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── TCPickerViewExample.xcworkspace
│ │ └── contents.xcworkspacedata
└── Source
│ ├── Classes
│ ├── NSLayoutConstraint+Additional.swift
│ ├── TCPickerTableViewCell.swift
│ ├── TCPickerView+Mode.swift
│ ├── TCPickerView+Theme.swift
│ ├── TCPickerView+Value.swift
│ ├── TCPickerView.swift
│ └── Themes
│ │ ├── TCPickerViewDarkTheme.swift
│ │ ├── TCPickerViewLightTheme.swift
│ │ └── TCPickerViewThemeType.swift
│ └── Resources
│ └── Media.xcassets
│ ├── Contents.json
│ └── checkmark_icon.imageset
│ ├── Contents.json
│ └── checkmark_icon.png
└── logo
├── favicon.png
├── logotype-a.png
└── logotype-b.png
/.gitignore:
--------------------------------------------------------------------------------
1 | TCPickerView/Example/TCPickerViewExample.xcodeproj/xcuserdata/
2 | TCPickerView/Example/TCPickerViewExample.xcworkspace/xcshareddata/
3 | TCPickerView/Example/TCPickerViewExample.xcworkspace/xcuserdata/
4 | TCPickerView/Example/TCPickerViewExample.xcodeproj/project.xcworkspace/
5 | TCPickerView/Example/Pods/
--------------------------------------------------------------------------------
/.swift-version:
--------------------------------------------------------------------------------
1 | 5.0
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Taras Chernyshenko
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 |

2 |
3 | Picker view popup with multiply/single rows selection written in Swift with colors/sizes/texts/and fonts customization
4 |
5 | ## Requirements
6 |
7 | TCPickerView works on iOS 9 and higher. It depends on the following Apple frameworks, which should already be included with most Xcode templates:
8 |
9 | * Foundation
10 | * UIKit
11 |
12 | ## Installation
13 | #### CocoaPods
14 | You can use [CocoaPods](http://cocoapods.org/) to install `TCPickerView` by adding it to your `Podfile`:
15 |
16 | ```ruby
17 | platform :ios, '9.0'
18 | use_frameworks!
19 | pod 'TCPickerView'
20 | ```
21 | #### Manually
22 | 1. Download and drop ```Classes``` and ```Assets``` folder in your project.
23 | 2. Congratulations!
24 |
25 | ## Example
26 |
27 | ```swift
28 | import UIKit
29 | import TCPickerView
30 |
31 | class ViewController: UIViewController {
32 |
33 | @IBAction private func showButtonPressed(button: UIButton) {
34 | var picker: TCPickerViewInput = TCPickerView()
35 | picker.title = "Cars"
36 | let cars = [
37 | "Chevrolet Bolt EV",
38 | "Subaru WRX",
39 | "Porsche Panamera",
40 | "BMW 330e",
41 | "Chevrolet Volt",
42 | "Ford C-Max Hybrid",
43 | "Ford Focus"
44 | ]
45 | let values = cars.map { TCPickerView.Value(title: $0) }
46 | picker.values = values
47 | picker.delegate = self
48 | picker.selection = .single
49 | picker.completion = { (selectedIndexes) in
50 | for i in selectedIndexes {
51 | print(values[i].title)
52 | }
53 | }
54 | picker.closeAction = {
55 | print("Handle close action here")
56 | }
57 | picker.show()
58 | }
59 | }
60 | ```
61 |
62 |
63 |
64 |
65 |
66 | If you want to set pre-selected values: `TCPickerView.Value(title: "Chevrolet Bolt EV", isChecked: true)`
67 |
68 | Picker supports `multiply`, `single` and `none` row selection. You can set desired behavior by setting `selection` property of `TCPickerView` to the appropriate value.
69 |
70 | #### Tracking user actions
71 |
72 | `TCPickerViewOutput` allows you track what item was selected. Implament this method in your controller and assign `delegate` property
73 | to this controller.
74 |
75 | ```swift
76 | public protocol TCPickerViewOutput: class {
77 | func pickerView(_ pickerView: TCPickerView, didSelectRowAtIndex index: Int)
78 | }
79 | ```
80 |
81 | You can request new method if you need it. I'm open to discuss
82 |
83 | #### UI customization
84 | Create a class that conform to `TCPickerViewThemeType` protocol and adjust UI layout or use one of the existing themes:
85 | * TCPickerViewDefaultTheme
86 | * TCPickerViewLightTheme
87 | * TCPickerViewDarkTheme
88 |
89 | Use them as reference for creation you own awesome design.
90 |
91 | You can change next properties:
92 |
93 | ```swift
94 | var doneText: String { get }
95 | var closeText: String { get }
96 |
97 | var backgroundColor: UIColor { get }
98 | var titleColor: UIColor { get }
99 | var doneTextColor: UIColor { get }
100 | var closeTextColor: UIColor { get }
101 | var headerBackgroundColor: UIColor { get }
102 | var doneBackgroundColor: UIColor { get }
103 | var closeBackgroundColor: UIColor { get }
104 | var separatorColor: UIColor { get }
105 |
106 | var buttonsFont: UIFont { get }
107 | var titleFont: UIFont { get }
108 |
109 | var rowHeight: CGFloat { get }
110 | var headerHeight: CGFloat { get }
111 | var cornerRadius: CGFloat { get }
112 |
113 | var searchColor: UIColor { get }
114 | ```
115 |
116 | #### Search
117 |
118 | This library provides easy to use search box. You can enable it by using `isSearchEnabled` property and then subscribe to `searchResult: TCPicker.SearchResult` closure.
119 |
120 | ```swift
121 | picker.isSearchEnabled = true
122 | picker.searchResult = { [unowned self] searchText in
123 | self.filteredCars = cars.filter { $0.contains(searchText) }
124 | let values = filteredCars.map { TCPickerView.Value(title: $0) }
125 | picker.values = values
126 | }
127 | ```
128 | Feel free to refer `DarkViewController` for the usage example. Or you can implement `UISearchBarDelegate` delegate methods in your controller and assign `searchBar.delegate` to it e.g. `picker.searchBar.delegate = self`
129 |
130 | #### Use your own cells
131 |
132 | * desing your cell in .xib or code
133 | * conform your cell to `TCPickerCellType` protocol
134 | * register cell in picker by using one of next methods
135 | ```swift
136 | func register(_ nib: UINib?, forCellReuseIdentifier identifier: String)
137 | func register(_ cellClass: Swift.AnyClass?, forCellReuseIdentifier identifier: String)
138 | ```
139 | * implement `TCPickerViewOutput` protocol in your view controller
140 | * dequeue your cell in `func pickerView(_ pickerView: TCPickerViewInput,
141 | cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)?` method by calling `func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell & TCPickerCellType`
142 | * for more details have a look into `LightViewController` file in a example project.
143 |
144 | ## Contributing to this project
145 |
146 | If you have feature requests or bug reports, feel free to help out by sending pull requests or create issues.
147 |
148 | ## License
149 |
150 | This code is distributed under the terms and conditions of the [MIT license](LICENSE).
151 |
--------------------------------------------------------------------------------
/TCPickerView.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'TCPickerView'
3 | s.version = '0.2.8'
4 | s.summary = 'Picker view popup with multiply rows selection written in Swift'
5 |
6 | s.description = <<-DESC
7 | Picker view popup with ability to select multiply rows written in Swift
8 | DESC
9 |
10 | s.homepage = 'https://github.com/ChernyshenkoTaras/TCPickerView'
11 | s.license = { :type => 'MIT', :file => 'LICENSE' }
12 | s.author = { 'Taras Chernyshenko' => 'taras.chernyshenko@gmail.com' }
13 | s.source = { :git => 'https://github.com/ChernyshenkoTaras/TCPickerView.git', :tag => s.version.to_s }
14 | s.social_media_url = 'https://twitter.com/@t_chernyshenko'
15 |
16 | s.ios.deployment_target = '9.0'
17 |
18 | s.source_files = 'TCPickerView/Source/Classes/**/*'
19 | s.ios.resource_bundle = {'TCPickerView' => ['TCPickerView/Source/Resources/**/*.{xcassets}']}
20 | end
21 |
--------------------------------------------------------------------------------
/TCPickerView/0.1.9/TCPickerView.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = 'TCPickerView'
3 | s.version = '0.1.9'
4 | s.summary = 'Picker view popup with multiply rows selection written in Swift'
5 |
6 | s.description = <<-DESC
7 | Picker view popup with ability to select multiply rows written in Swift
8 | DESC
9 |
10 | s.homepage = 'https://github.com/ChernyshenkoTaras/TCPickerView'
11 | s.license = { :type => 'MIT', :file => 'LICENSE' }
12 | s.author = { 'Taras Chernyshenko' => 'taras.chernyshenko@gmail.com' }
13 | s.source = { :git => 'https://github.com/ChernyshenkoTaras/TCPickerView.git', :tag => s.version.to_s }
14 | s.social_media_url = 'https://twitter.com/@t_chernyshenko'
15 |
16 | s.ios.deployment_target = '9.0'
17 |
18 | s.source_files = 'TCPickerView/Source/Classes/**/*'
19 | s.ios.resource_bundle = {'TCPickerView' => ['TCPickerView/Source/Resources/**/*.{xcassets}']}
20 | end
21 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Podfile:
--------------------------------------------------------------------------------
1 | source 'https://github.com/CocoaPods/Specs.git'
2 | platform :ios, '9.0'
3 | use_frameworks!
4 |
5 | target 'TCPickerViewExample' do
6 | pod 'TCPickerView', :path => '../../'
7 | end
8 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - TCPickerView (0.2.8)
3 |
4 | DEPENDENCIES:
5 | - TCPickerView (from `../../`)
6 |
7 | EXTERNAL SOURCES:
8 | TCPickerView:
9 | :path: "../../"
10 |
11 | SPEC CHECKSUMS:
12 | TCPickerView: fbb8cfb50bd58013dc3d91f13f88a164332ff31d
13 |
14 | PODFILE CHECKSUM: 1093d945dd922e563840be5dd00f923141c67062
15 |
16 | COCOAPODS: 1.9.1
17 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Local Podspecs/TCPickerView.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "TCPickerView",
3 | "version": "0.2.8",
4 | "summary": "Picker view popup with multiply rows selection written in Swift",
5 | "description": "Picker view popup with ability to select multiply rows written in Swift",
6 | "homepage": "https://github.com/ChernyshenkoTaras/TCPickerView",
7 | "license": {
8 | "type": "MIT",
9 | "file": "LICENSE"
10 | },
11 | "authors": {
12 | "Taras Chernyshenko": "taras.chernyshenko@gmail.com"
13 | },
14 | "source": {
15 | "git": "https://github.com/ChernyshenkoTaras/TCPickerView.git",
16 | "tag": "0.2.8"
17 | },
18 | "social_media_url": "https://twitter.com/@t_chernyshenko",
19 | "platforms": {
20 | "ios": "9.0"
21 | },
22 | "source_files": "TCPickerView/Source/Classes/**/*",
23 | "ios": {
24 | "resource_bundles": {
25 | "TCPickerView": [
26 | "TCPickerView/Source/Resources/**/*.{xcassets}"
27 | ]
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - TCPickerView (0.2.8)
3 |
4 | DEPENDENCIES:
5 | - TCPickerView (from `../../`)
6 |
7 | EXTERNAL SOURCES:
8 | TCPickerView:
9 | :path: "../../"
10 |
11 | SPEC CHECKSUMS:
12 | TCPickerView: fbb8cfb50bd58013dc3d91f13f88a164332ff31d
13 |
14 | PODFILE CHECKSUM: 1093d945dd922e563840be5dd00f923141c67062
15 |
16 | COCOAPODS: 1.9.1
17 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1AB9905149049E6B5F6D422AD79ABDAA /* Media.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 10C492027A8D4C4C7B4D3DDDB77C9F22 /* Media.xcassets */; };
11 | 6E0B8D1287A5867570C949A2FC2F934E /* NSLayoutConstraint+Additional.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4A5D1099F07E45E8794FDF5B8C2E698 /* NSLayoutConstraint+Additional.swift */; };
12 | 6F4189DF9B6B5CD5F319CFFDB0BFB2C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
13 | 7853997199FA9E9C9B461D755D05CEEE /* TCPickerView+Mode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1067B58129684D77808F3A484184E89E /* TCPickerView+Mode.swift */; };
14 | 7A9D9FA45A6A917D67CCD6C83B2C377D /* Pods-TCPickerViewExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 958F229F84968ED58B0C6C5BD81C35B7 /* Pods-TCPickerViewExample-dummy.m */; };
15 | 8F4F31EBA80DD309DCE0D16B62B9E40B /* TCPickerView+Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FA11D8383731112525A736973C3DB01 /* TCPickerView+Value.swift */; };
16 | 965A8B4B98740115FC7188940027654F /* TCPickerView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C93770B710B84C9B2B5D038101393230 /* TCPickerView-dummy.m */; };
17 | 9AB4E9A72DDECAE837E4B96A1201EE88 /* TCPickerViewLightTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F016120D779567878D20CCEE887AB3 /* TCPickerViewLightTheme.swift */; };
18 | B0E3329E2E03EB0AF41F23F0595E700B /* TCPickerViewDarkTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = B31AD046A43BABD68648235778652456 /* TCPickerViewDarkTheme.swift */; };
19 | BC7B0A1CAA47228F6071AAFD1F44C385 /* TCPickerViewThemeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C542F90C5B1404C19EFBDC83D6C3DC /* TCPickerViewThemeType.swift */; };
20 | CD562AAEDF6FC6C705CE3D5252453555 /* TCPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53766C295605B3A14D7D34E62832EC7F /* TCPickerView.swift */; };
21 | DB8F2925B3FA421D6D361ABAB59C7443 /* TCPickerView+Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = C69E2D91C698307CC742C47185A26E98 /* TCPickerView+Theme.swift */; };
22 | E0652F775A38C6984E5AD4169CACE846 /* TCPickerView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A13B511D2457F97F2D569C720FC89D76 /* TCPickerView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
23 | E69B9C1CBBB3924D468DD6016B6DDE41 /* TCPickerView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C5950F0D10543EE73EF0FE66CEBD875B /* TCPickerView.bundle */; };
24 | EA0B75BA0364A8D63682D08338FDC3A1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; };
25 | EDB44C20C9BA822C24141165F7CC9F0B /* TCPickerTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2004969C15C0E25E29587059FCB7667 /* TCPickerTableViewCell.swift */; };
26 | F8FD2E2BA2D825A491B8D79869C2583C /* Pods-TCPickerViewExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 574BABBB571B00AC7CF2EB1673C9C9AA /* Pods-TCPickerViewExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; };
27 | /* End PBXBuildFile section */
28 |
29 | /* Begin PBXContainerItemProxy section */
30 | 2DDA5D974624205A72C9B180538524DA /* PBXContainerItemProxy */ = {
31 | isa = PBXContainerItemProxy;
32 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
33 | proxyType = 1;
34 | remoteGlobalIDString = 211EF9A6577258B664A49FCA245F7E60;
35 | remoteInfo = "TCPickerView-TCPickerView";
36 | };
37 | 3612CC569D2265937BCE9AC2C13469B1 /* PBXContainerItemProxy */ = {
38 | isa = PBXContainerItemProxy;
39 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */;
40 | proxyType = 1;
41 | remoteGlobalIDString = C546C7838F5DD14952A321978585091F;
42 | remoteInfo = TCPickerView;
43 | };
44 | /* End PBXContainerItemProxy section */
45 |
46 | /* Begin PBXFileReference section */
47 | 051CEFE1ACEB5AC9723D26F5DBFA879B /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; };
48 | 06C2F34C67A97B1462F588C9D0900C2D /* TCPickerView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TCPickerView-prefix.pch"; sourceTree = ""; };
49 | 1067B58129684D77808F3A484184E89E /* TCPickerView+Mode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TCPickerView+Mode.swift"; path = "TCPickerView/Source/Classes/TCPickerView+Mode.swift"; sourceTree = ""; };
50 | 10C492027A8D4C4C7B4D3DDDB77C9F22 /* Media.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Media.xcassets; path = TCPickerView/Source/Resources/Media.xcassets; sourceTree = ""; };
51 | 1E60A7B59D64B10A1C4DC703F6AADA30 /* Pods-TCPickerViewExample-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TCPickerViewExample-Info.plist"; sourceTree = ""; };
52 | 1E65A9476D3C46B54BE6F4C2145E44FB /* Pods_TCPickerViewExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_TCPickerViewExample.framework; path = "Pods-TCPickerViewExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
53 | 270C622A273D0D6AE0CD8D5F641340AD /* TCPickerView.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = TCPickerView.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
54 | 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; };
55 | 351872BC74AF5540E72AC7B14BE6E3A9 /* Pods-TCPickerViewExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-TCPickerViewExample-acknowledgements.markdown"; sourceTree = ""; };
56 | 37C542F90C5B1404C19EFBDC83D6C3DC /* TCPickerViewThemeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TCPickerViewThemeType.swift; sourceTree = ""; };
57 | 380C2EBDFF7803657AA2CCFAA977A285 /* Pods-TCPickerViewExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-TCPickerViewExample-frameworks.sh"; sourceTree = ""; };
58 | 41F016120D779567878D20CCEE887AB3 /* TCPickerViewLightTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TCPickerViewLightTheme.swift; sourceTree = ""; };
59 | 48934C5810CC2CB7F84F7EA5CF0C1DD9 /* Pods-TCPickerViewExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-TCPickerViewExample.modulemap"; sourceTree = ""; };
60 | 53766C295605B3A14D7D34E62832EC7F /* TCPickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TCPickerView.swift; path = TCPickerView/Source/Classes/TCPickerView.swift; sourceTree = ""; };
61 | 574BABBB571B00AC7CF2EB1673C9C9AA /* Pods-TCPickerViewExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-TCPickerViewExample-umbrella.h"; sourceTree = ""; };
62 | 5A15DA116FD19A787F87BD665EEC32AA /* TCPickerView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TCPickerView.release.xcconfig; sourceTree = ""; };
63 | 6C593C9074789BA3093D7A5BA6732500 /* TCPickerView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TCPickerView.modulemap; sourceTree = ""; };
64 | 8177149983246E2AEFC5704D518E5505 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; };
65 | 8D6B1ED67035B5B321BDB6CD2CE8BA98 /* TCPickerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TCPickerView.framework; path = TCPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
66 | 8FA11D8383731112525A736973C3DB01 /* TCPickerView+Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TCPickerView+Value.swift"; path = "TCPickerView/Source/Classes/TCPickerView+Value.swift"; sourceTree = ""; };
67 | 90DC1DD02EC953A707AA21984F0F527E /* Pods-TCPickerViewExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-TCPickerViewExample-acknowledgements.plist"; sourceTree = ""; };
68 | 958F229F84968ED58B0C6C5BD81C35B7 /* Pods-TCPickerViewExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-TCPickerViewExample-dummy.m"; sourceTree = ""; };
69 | 99BC1CDE6BE04EC697536C3BEC6999A2 /* TCPickerView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TCPickerView.debug.xcconfig; sourceTree = ""; };
70 | 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; };
71 | A13B511D2457F97F2D569C720FC89D76 /* TCPickerView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TCPickerView-umbrella.h"; sourceTree = ""; };
72 | A2004969C15C0E25E29587059FCB7667 /* TCPickerTableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TCPickerTableViewCell.swift; path = TCPickerView/Source/Classes/TCPickerTableViewCell.swift; sourceTree = ""; };
73 | AF7E29D38CFAD578D84623C3600EB589 /* TCPickerView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TCPickerView-Info.plist"; sourceTree = ""; };
74 | B31AD046A43BABD68648235778652456 /* TCPickerViewDarkTheme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TCPickerViewDarkTheme.swift; sourceTree = ""; };
75 | C5950F0D10543EE73EF0FE66CEBD875B /* TCPickerView.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = TCPickerView.bundle; path = "TCPickerView-TCPickerView.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
76 | C69E2D91C698307CC742C47185A26E98 /* TCPickerView+Theme.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TCPickerView+Theme.swift"; path = "TCPickerView/Source/Classes/TCPickerView+Theme.swift"; sourceTree = ""; };
77 | C70BD431D40845658ABDA61CBF0C92E1 /* ResourceBundle-TCPickerView-TCPickerView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-TCPickerView-TCPickerView-Info.plist"; sourceTree = ""; };
78 | C93770B710B84C9B2B5D038101393230 /* TCPickerView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TCPickerView-dummy.m"; sourceTree = ""; };
79 | D5AC87EDA31BFB1E4ED3E0F902CA2514 /* Pods-TCPickerViewExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TCPickerViewExample.release.xcconfig"; sourceTree = ""; };
80 | E4A5D1099F07E45E8794FDF5B8C2E698 /* NSLayoutConstraint+Additional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSLayoutConstraint+Additional.swift"; path = "TCPickerView/Source/Classes/NSLayoutConstraint+Additional.swift"; sourceTree = ""; };
81 | E5C0F4459ED1A5DA6752196C2EF2D764 /* Pods-TCPickerViewExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-TCPickerViewExample.debug.xcconfig"; sourceTree = ""; };
82 | /* End PBXFileReference section */
83 |
84 | /* Begin PBXFrameworksBuildPhase section */
85 | 47F655831E51B1C57E01A88CB1832DE4 /* Frameworks */ = {
86 | isa = PBXFrameworksBuildPhase;
87 | buildActionMask = 2147483647;
88 | files = (
89 | );
90 | runOnlyForDeploymentPostprocessing = 0;
91 | };
92 | A28BC642C7684294351A6C181BCC17E3 /* Frameworks */ = {
93 | isa = PBXFrameworksBuildPhase;
94 | buildActionMask = 2147483647;
95 | files = (
96 | 6F4189DF9B6B5CD5F319CFFDB0BFB2C3 /* Foundation.framework in Frameworks */,
97 | );
98 | runOnlyForDeploymentPostprocessing = 0;
99 | };
100 | F95AC6121C8870940F1E3F0B9922BA87 /* Frameworks */ = {
101 | isa = PBXFrameworksBuildPhase;
102 | buildActionMask = 2147483647;
103 | files = (
104 | EA0B75BA0364A8D63682D08338FDC3A1 /* Foundation.framework in Frameworks */,
105 | );
106 | runOnlyForDeploymentPostprocessing = 0;
107 | };
108 | /* End PBXFrameworksBuildPhase section */
109 |
110 | /* Begin PBXGroup section */
111 | 280DD9FA683778171F864EEDC7112D46 /* Targets Support Files */ = {
112 | isa = PBXGroup;
113 | children = (
114 | 7450BCA5EF811EC22D659A46824D65A5 /* Pods-TCPickerViewExample */,
115 | );
116 | name = "Targets Support Files";
117 | sourceTree = "";
118 | };
119 | 32942B3D586D33C4C9D0DC62652C2609 /* Products */ = {
120 | isa = PBXGroup;
121 | children = (
122 | 1E65A9476D3C46B54BE6F4C2145E44FB /* Pods_TCPickerViewExample.framework */,
123 | C5950F0D10543EE73EF0FE66CEBD875B /* TCPickerView.bundle */,
124 | 8D6B1ED67035B5B321BDB6CD2CE8BA98 /* TCPickerView.framework */,
125 | );
126 | name = Products;
127 | sourceTree = "";
128 | };
129 | 377F4CB8562A0D11F9B217A43A5007EA /* Resources */ = {
130 | isa = PBXGroup;
131 | children = (
132 | 10C492027A8D4C4C7B4D3DDDB77C9F22 /* Media.xcassets */,
133 | );
134 | name = Resources;
135 | sourceTree = "";
136 | };
137 | 7450BCA5EF811EC22D659A46824D65A5 /* Pods-TCPickerViewExample */ = {
138 | isa = PBXGroup;
139 | children = (
140 | 48934C5810CC2CB7F84F7EA5CF0C1DD9 /* Pods-TCPickerViewExample.modulemap */,
141 | 351872BC74AF5540E72AC7B14BE6E3A9 /* Pods-TCPickerViewExample-acknowledgements.markdown */,
142 | 90DC1DD02EC953A707AA21984F0F527E /* Pods-TCPickerViewExample-acknowledgements.plist */,
143 | 958F229F84968ED58B0C6C5BD81C35B7 /* Pods-TCPickerViewExample-dummy.m */,
144 | 380C2EBDFF7803657AA2CCFAA977A285 /* Pods-TCPickerViewExample-frameworks.sh */,
145 | 1E60A7B59D64B10A1C4DC703F6AADA30 /* Pods-TCPickerViewExample-Info.plist */,
146 | 574BABBB571B00AC7CF2EB1673C9C9AA /* Pods-TCPickerViewExample-umbrella.h */,
147 | E5C0F4459ED1A5DA6752196C2EF2D764 /* Pods-TCPickerViewExample.debug.xcconfig */,
148 | D5AC87EDA31BFB1E4ED3E0F902CA2514 /* Pods-TCPickerViewExample.release.xcconfig */,
149 | );
150 | name = "Pods-TCPickerViewExample";
151 | path = "Target Support Files/Pods-TCPickerViewExample";
152 | sourceTree = "";
153 | };
154 | 876C926539CE41976020D15207A4E780 /* Themes */ = {
155 | isa = PBXGroup;
156 | children = (
157 | B31AD046A43BABD68648235778652456 /* TCPickerViewDarkTheme.swift */,
158 | 41F016120D779567878D20CCEE887AB3 /* TCPickerViewLightTheme.swift */,
159 | 37C542F90C5B1404C19EFBDC83D6C3DC /* TCPickerViewThemeType.swift */,
160 | );
161 | name = Themes;
162 | path = TCPickerView/Source/Classes/Themes;
163 | sourceTree = "";
164 | };
165 | 9E26E014F99373970589682A4163E1AD /* TCPickerView */ = {
166 | isa = PBXGroup;
167 | children = (
168 | E4A5D1099F07E45E8794FDF5B8C2E698 /* NSLayoutConstraint+Additional.swift */,
169 | A2004969C15C0E25E29587059FCB7667 /* TCPickerTableViewCell.swift */,
170 | 53766C295605B3A14D7D34E62832EC7F /* TCPickerView.swift */,
171 | 1067B58129684D77808F3A484184E89E /* TCPickerView+Mode.swift */,
172 | C69E2D91C698307CC742C47185A26E98 /* TCPickerView+Theme.swift */,
173 | 8FA11D8383731112525A736973C3DB01 /* TCPickerView+Value.swift */,
174 | AAB90549A38551814D0CD0ACB93C26EF /* Pod */,
175 | 377F4CB8562A0D11F9B217A43A5007EA /* Resources */,
176 | D3F2BADDDF8C48E4CB176F41CFF96F59 /* Support Files */,
177 | 876C926539CE41976020D15207A4E780 /* Themes */,
178 | );
179 | name = TCPickerView;
180 | path = ../../..;
181 | sourceTree = "";
182 | };
183 | AAB90549A38551814D0CD0ACB93C26EF /* Pod */ = {
184 | isa = PBXGroup;
185 | children = (
186 | 051CEFE1ACEB5AC9723D26F5DBFA879B /* LICENSE */,
187 | 8177149983246E2AEFC5704D518E5505 /* README.md */,
188 | 270C622A273D0D6AE0CD8D5F641340AD /* TCPickerView.podspec */,
189 | );
190 | name = Pod;
191 | sourceTree = "";
192 | };
193 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = {
194 | isa = PBXGroup;
195 | children = (
196 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */,
197 | );
198 | name = iOS;
199 | sourceTree = "";
200 | };
201 | CDDECE87AB59E28718D804AE804DCD03 /* Development Pods */ = {
202 | isa = PBXGroup;
203 | children = (
204 | 9E26E014F99373970589682A4163E1AD /* TCPickerView */,
205 | );
206 | name = "Development Pods";
207 | sourceTree = "";
208 | };
209 | CF1408CF629C7361332E53B88F7BD30C = {
210 | isa = PBXGroup;
211 | children = (
212 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */,
213 | CDDECE87AB59E28718D804AE804DCD03 /* Development Pods */,
214 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */,
215 | 32942B3D586D33C4C9D0DC62652C2609 /* Products */,
216 | 280DD9FA683778171F864EEDC7112D46 /* Targets Support Files */,
217 | );
218 | sourceTree = "";
219 | };
220 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = {
221 | isa = PBXGroup;
222 | children = (
223 | C0834CEBB1379A84116EF29F93051C60 /* iOS */,
224 | );
225 | name = Frameworks;
226 | sourceTree = "";
227 | };
228 | D3F2BADDDF8C48E4CB176F41CFF96F59 /* Support Files */ = {
229 | isa = PBXGroup;
230 | children = (
231 | C70BD431D40845658ABDA61CBF0C92E1 /* ResourceBundle-TCPickerView-TCPickerView-Info.plist */,
232 | 6C593C9074789BA3093D7A5BA6732500 /* TCPickerView.modulemap */,
233 | C93770B710B84C9B2B5D038101393230 /* TCPickerView-dummy.m */,
234 | AF7E29D38CFAD578D84623C3600EB589 /* TCPickerView-Info.plist */,
235 | 06C2F34C67A97B1462F588C9D0900C2D /* TCPickerView-prefix.pch */,
236 | A13B511D2457F97F2D569C720FC89D76 /* TCPickerView-umbrella.h */,
237 | 99BC1CDE6BE04EC697536C3BEC6999A2 /* TCPickerView.debug.xcconfig */,
238 | 5A15DA116FD19A787F87BD665EEC32AA /* TCPickerView.release.xcconfig */,
239 | );
240 | name = "Support Files";
241 | path = "TCPickerView/Example/Pods/Target Support Files/TCPickerView";
242 | sourceTree = "";
243 | };
244 | /* End PBXGroup section */
245 |
246 | /* Begin PBXHeadersBuildPhase section */
247 | A364EEA867ABD915EAB4E78BD6F679D2 /* Headers */ = {
248 | isa = PBXHeadersBuildPhase;
249 | buildActionMask = 2147483647;
250 | files = (
251 | F8FD2E2BA2D825A491B8D79869C2583C /* Pods-TCPickerViewExample-umbrella.h in Headers */,
252 | );
253 | runOnlyForDeploymentPostprocessing = 0;
254 | };
255 | C9FBEB5B7E5D447BA149685B333FF0F2 /* Headers */ = {
256 | isa = PBXHeadersBuildPhase;
257 | buildActionMask = 2147483647;
258 | files = (
259 | E0652F775A38C6984E5AD4169CACE846 /* TCPickerView-umbrella.h in Headers */,
260 | );
261 | runOnlyForDeploymentPostprocessing = 0;
262 | };
263 | /* End PBXHeadersBuildPhase section */
264 |
265 | /* Begin PBXNativeTarget section */
266 | 211EF9A6577258B664A49FCA245F7E60 /* TCPickerView-TCPickerView */ = {
267 | isa = PBXNativeTarget;
268 | buildConfigurationList = 6A08640CBD60D2B62D3C987896C20F55 /* Build configuration list for PBXNativeTarget "TCPickerView-TCPickerView" */;
269 | buildPhases = (
270 | 473D049593457F5415EFD36ECEE80CCF /* Sources */,
271 | 47F655831E51B1C57E01A88CB1832DE4 /* Frameworks */,
272 | E0741BF05D1F1E654D1DF017E95A6273 /* Resources */,
273 | );
274 | buildRules = (
275 | );
276 | dependencies = (
277 | );
278 | name = "TCPickerView-TCPickerView";
279 | productName = "TCPickerView-TCPickerView";
280 | productReference = C5950F0D10543EE73EF0FE66CEBD875B /* TCPickerView.bundle */;
281 | productType = "com.apple.product-type.bundle";
282 | };
283 | C546C7838F5DD14952A321978585091F /* TCPickerView */ = {
284 | isa = PBXNativeTarget;
285 | buildConfigurationList = C876D5EE424779512372D7BCE0DA0C39 /* Build configuration list for PBXNativeTarget "TCPickerView" */;
286 | buildPhases = (
287 | C9FBEB5B7E5D447BA149685B333FF0F2 /* Headers */,
288 | C156ED3297B7470D3BED10251069F23E /* Sources */,
289 | F95AC6121C8870940F1E3F0B9922BA87 /* Frameworks */,
290 | EEA6418865DE65A2547DBEF091EC74BC /* Resources */,
291 | );
292 | buildRules = (
293 | );
294 | dependencies = (
295 | 9FEB77A539D8B733E8A81AAA60EE0550 /* PBXTargetDependency */,
296 | );
297 | name = TCPickerView;
298 | productName = TCPickerView;
299 | productReference = 8D6B1ED67035B5B321BDB6CD2CE8BA98 /* TCPickerView.framework */;
300 | productType = "com.apple.product-type.framework";
301 | };
302 | FAF5191F1EC4D712649DE91142C272D2 /* Pods-TCPickerViewExample */ = {
303 | isa = PBXNativeTarget;
304 | buildConfigurationList = CC491539EC0C8666CE2FD8113A6D3323 /* Build configuration list for PBXNativeTarget "Pods-TCPickerViewExample" */;
305 | buildPhases = (
306 | A364EEA867ABD915EAB4E78BD6F679D2 /* Headers */,
307 | 7CB1C47D6DF9D6444CC02AD353754760 /* Sources */,
308 | A28BC642C7684294351A6C181BCC17E3 /* Frameworks */,
309 | 4D9220E988A80AA73C29B2989E2F2839 /* Resources */,
310 | );
311 | buildRules = (
312 | );
313 | dependencies = (
314 | 8A1F017153DB8CE8AB0EE42112F8253B /* PBXTargetDependency */,
315 | );
316 | name = "Pods-TCPickerViewExample";
317 | productName = "Pods-TCPickerViewExample";
318 | productReference = 1E65A9476D3C46B54BE6F4C2145E44FB /* Pods_TCPickerViewExample.framework */;
319 | productType = "com.apple.product-type.framework";
320 | };
321 | /* End PBXNativeTarget section */
322 |
323 | /* Begin PBXProject section */
324 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = {
325 | isa = PBXProject;
326 | attributes = {
327 | LastSwiftUpdateCheck = 1100;
328 | LastUpgradeCheck = 1100;
329 | };
330 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */;
331 | compatibilityVersion = "Xcode 8.0";
332 | developmentRegion = en;
333 | hasScannedForEncodings = 0;
334 | knownRegions = (
335 | en,
336 | Base,
337 | );
338 | mainGroup = CF1408CF629C7361332E53B88F7BD30C;
339 | productRefGroup = 32942B3D586D33C4C9D0DC62652C2609 /* Products */;
340 | projectDirPath = "";
341 | projectRoot = "";
342 | targets = (
343 | FAF5191F1EC4D712649DE91142C272D2 /* Pods-TCPickerViewExample */,
344 | C546C7838F5DD14952A321978585091F /* TCPickerView */,
345 | 211EF9A6577258B664A49FCA245F7E60 /* TCPickerView-TCPickerView */,
346 | );
347 | };
348 | /* End PBXProject section */
349 |
350 | /* Begin PBXResourcesBuildPhase section */
351 | 4D9220E988A80AA73C29B2989E2F2839 /* Resources */ = {
352 | isa = PBXResourcesBuildPhase;
353 | buildActionMask = 2147483647;
354 | files = (
355 | );
356 | runOnlyForDeploymentPostprocessing = 0;
357 | };
358 | E0741BF05D1F1E654D1DF017E95A6273 /* Resources */ = {
359 | isa = PBXResourcesBuildPhase;
360 | buildActionMask = 2147483647;
361 | files = (
362 | 1AB9905149049E6B5F6D422AD79ABDAA /* Media.xcassets in Resources */,
363 | );
364 | runOnlyForDeploymentPostprocessing = 0;
365 | };
366 | EEA6418865DE65A2547DBEF091EC74BC /* Resources */ = {
367 | isa = PBXResourcesBuildPhase;
368 | buildActionMask = 2147483647;
369 | files = (
370 | E69B9C1CBBB3924D468DD6016B6DDE41 /* TCPickerView.bundle in Resources */,
371 | );
372 | runOnlyForDeploymentPostprocessing = 0;
373 | };
374 | /* End PBXResourcesBuildPhase section */
375 |
376 | /* Begin PBXSourcesBuildPhase section */
377 | 473D049593457F5415EFD36ECEE80CCF /* Sources */ = {
378 | isa = PBXSourcesBuildPhase;
379 | buildActionMask = 2147483647;
380 | files = (
381 | );
382 | runOnlyForDeploymentPostprocessing = 0;
383 | };
384 | 7CB1C47D6DF9D6444CC02AD353754760 /* Sources */ = {
385 | isa = PBXSourcesBuildPhase;
386 | buildActionMask = 2147483647;
387 | files = (
388 | 7A9D9FA45A6A917D67CCD6C83B2C377D /* Pods-TCPickerViewExample-dummy.m in Sources */,
389 | );
390 | runOnlyForDeploymentPostprocessing = 0;
391 | };
392 | C156ED3297B7470D3BED10251069F23E /* Sources */ = {
393 | isa = PBXSourcesBuildPhase;
394 | buildActionMask = 2147483647;
395 | files = (
396 | 6E0B8D1287A5867570C949A2FC2F934E /* NSLayoutConstraint+Additional.swift in Sources */,
397 | EDB44C20C9BA822C24141165F7CC9F0B /* TCPickerTableViewCell.swift in Sources */,
398 | 7853997199FA9E9C9B461D755D05CEEE /* TCPickerView+Mode.swift in Sources */,
399 | DB8F2925B3FA421D6D361ABAB59C7443 /* TCPickerView+Theme.swift in Sources */,
400 | 8F4F31EBA80DD309DCE0D16B62B9E40B /* TCPickerView+Value.swift in Sources */,
401 | 965A8B4B98740115FC7188940027654F /* TCPickerView-dummy.m in Sources */,
402 | CD562AAEDF6FC6C705CE3D5252453555 /* TCPickerView.swift in Sources */,
403 | B0E3329E2E03EB0AF41F23F0595E700B /* TCPickerViewDarkTheme.swift in Sources */,
404 | 9AB4E9A72DDECAE837E4B96A1201EE88 /* TCPickerViewLightTheme.swift in Sources */,
405 | BC7B0A1CAA47228F6071AAFD1F44C385 /* TCPickerViewThemeType.swift in Sources */,
406 | );
407 | runOnlyForDeploymentPostprocessing = 0;
408 | };
409 | /* End PBXSourcesBuildPhase section */
410 |
411 | /* Begin PBXTargetDependency section */
412 | 8A1F017153DB8CE8AB0EE42112F8253B /* PBXTargetDependency */ = {
413 | isa = PBXTargetDependency;
414 | name = TCPickerView;
415 | target = C546C7838F5DD14952A321978585091F /* TCPickerView */;
416 | targetProxy = 3612CC569D2265937BCE9AC2C13469B1 /* PBXContainerItemProxy */;
417 | };
418 | 9FEB77A539D8B733E8A81AAA60EE0550 /* PBXTargetDependency */ = {
419 | isa = PBXTargetDependency;
420 | name = "TCPickerView-TCPickerView";
421 | target = 211EF9A6577258B664A49FCA245F7E60 /* TCPickerView-TCPickerView */;
422 | targetProxy = 2DDA5D974624205A72C9B180538524DA /* PBXContainerItemProxy */;
423 | };
424 | /* End PBXTargetDependency section */
425 |
426 | /* Begin XCBuildConfiguration section */
427 | 1AA6EDC016D4CD859699B6CF7053DC59 /* Release */ = {
428 | isa = XCBuildConfiguration;
429 | baseConfigurationReference = 5A15DA116FD19A787F87BD665EEC32AA /* TCPickerView.release.xcconfig */;
430 | buildSettings = {
431 | CODE_SIGN_IDENTITY = "iPhone Developer";
432 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/TCPickerView";
433 | IBSC_MODULE = TCPickerView;
434 | INFOPLIST_FILE = "Target Support Files/TCPickerView/ResourceBundle-TCPickerView-TCPickerView-Info.plist";
435 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
436 | PRODUCT_NAME = TCPickerView;
437 | SDKROOT = iphoneos;
438 | SKIP_INSTALL = YES;
439 | TARGETED_DEVICE_FAMILY = "1,2";
440 | WRAPPER_EXTENSION = bundle;
441 | };
442 | name = Release;
443 | };
444 | 2A7733A082756080A3A3F0BE48D21199 /* Debug */ = {
445 | isa = XCBuildConfiguration;
446 | baseConfigurationReference = E5C0F4459ED1A5DA6752196C2EF2D764 /* Pods-TCPickerViewExample.debug.xcconfig */;
447 | buildSettings = {
448 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
449 | CODE_SIGN_IDENTITY = "";
450 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
451 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
452 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
453 | CURRENT_PROJECT_VERSION = 1;
454 | DEFINES_MODULE = YES;
455 | DYLIB_COMPATIBILITY_VERSION = 1;
456 | DYLIB_CURRENT_VERSION = 1;
457 | DYLIB_INSTALL_NAME_BASE = "@rpath";
458 | INFOPLIST_FILE = "Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-Info.plist";
459 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
460 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
461 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
462 | MACH_O_TYPE = staticlib;
463 | MODULEMAP_FILE = "Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.modulemap";
464 | OTHER_LDFLAGS = "";
465 | OTHER_LIBTOOLFLAGS = "";
466 | PODS_ROOT = "$(SRCROOT)";
467 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
468 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
469 | SDKROOT = iphoneos;
470 | SKIP_INSTALL = YES;
471 | TARGETED_DEVICE_FAMILY = "1,2";
472 | VERSIONING_SYSTEM = "apple-generic";
473 | VERSION_INFO_PREFIX = "";
474 | };
475 | name = Debug;
476 | };
477 | 73D8E55E8E1F582C35CD4C36FAA8F473 /* Release */ = {
478 | isa = XCBuildConfiguration;
479 | baseConfigurationReference = 5A15DA116FD19A787F87BD665EEC32AA /* TCPickerView.release.xcconfig */;
480 | buildSettings = {
481 | CODE_SIGN_IDENTITY = "";
482 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
483 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
484 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
485 | CURRENT_PROJECT_VERSION = 1;
486 | DEFINES_MODULE = YES;
487 | DYLIB_COMPATIBILITY_VERSION = 1;
488 | DYLIB_CURRENT_VERSION = 1;
489 | DYLIB_INSTALL_NAME_BASE = "@rpath";
490 | GCC_PREFIX_HEADER = "Target Support Files/TCPickerView/TCPickerView-prefix.pch";
491 | INFOPLIST_FILE = "Target Support Files/TCPickerView/TCPickerView-Info.plist";
492 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
493 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
494 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
495 | MODULEMAP_FILE = "Target Support Files/TCPickerView/TCPickerView.modulemap";
496 | PRODUCT_MODULE_NAME = TCPickerView;
497 | PRODUCT_NAME = TCPickerView;
498 | SDKROOT = iphoneos;
499 | SKIP_INSTALL = YES;
500 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
501 | SWIFT_VERSION = 5.0;
502 | TARGETED_DEVICE_FAMILY = "1,2";
503 | VALIDATE_PRODUCT = YES;
504 | VERSIONING_SYSTEM = "apple-generic";
505 | VERSION_INFO_PREFIX = "";
506 | };
507 | name = Release;
508 | };
509 | 87593402EF1A5D055422C5411ACD84F8 /* Debug */ = {
510 | isa = XCBuildConfiguration;
511 | baseConfigurationReference = 99BC1CDE6BE04EC697536C3BEC6999A2 /* TCPickerView.debug.xcconfig */;
512 | buildSettings = {
513 | CODE_SIGN_IDENTITY = "iPhone Developer";
514 | CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/TCPickerView";
515 | IBSC_MODULE = TCPickerView;
516 | INFOPLIST_FILE = "Target Support Files/TCPickerView/ResourceBundle-TCPickerView-TCPickerView-Info.plist";
517 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
518 | PRODUCT_NAME = TCPickerView;
519 | SDKROOT = iphoneos;
520 | SKIP_INSTALL = YES;
521 | TARGETED_DEVICE_FAMILY = "1,2";
522 | WRAPPER_EXTENSION = bundle;
523 | };
524 | name = Debug;
525 | };
526 | 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = {
527 | isa = XCBuildConfiguration;
528 | buildSettings = {
529 | ALWAYS_SEARCH_USER_PATHS = NO;
530 | CLANG_ANALYZER_NONNULL = YES;
531 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
532 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
533 | CLANG_CXX_LIBRARY = "libc++";
534 | CLANG_ENABLE_MODULES = YES;
535 | CLANG_ENABLE_OBJC_ARC = YES;
536 | CLANG_ENABLE_OBJC_WEAK = YES;
537 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
538 | CLANG_WARN_BOOL_CONVERSION = YES;
539 | CLANG_WARN_COMMA = YES;
540 | CLANG_WARN_CONSTANT_CONVERSION = YES;
541 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
542 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
543 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
544 | CLANG_WARN_EMPTY_BODY = YES;
545 | CLANG_WARN_ENUM_CONVERSION = YES;
546 | CLANG_WARN_INFINITE_RECURSION = YES;
547 | CLANG_WARN_INT_CONVERSION = YES;
548 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
549 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
550 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
551 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
552 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
553 | CLANG_WARN_STRICT_PROTOTYPES = YES;
554 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
555 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
556 | CLANG_WARN_UNREACHABLE_CODE = YES;
557 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
558 | COPY_PHASE_STRIP = NO;
559 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
560 | ENABLE_NS_ASSERTIONS = NO;
561 | ENABLE_STRICT_OBJC_MSGSEND = YES;
562 | GCC_C_LANGUAGE_STANDARD = gnu11;
563 | GCC_NO_COMMON_BLOCKS = YES;
564 | GCC_PREPROCESSOR_DEFINITIONS = (
565 | "POD_CONFIGURATION_RELEASE=1",
566 | "$(inherited)",
567 | );
568 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
569 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
570 | GCC_WARN_UNDECLARED_SELECTOR = YES;
571 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
572 | GCC_WARN_UNUSED_FUNCTION = YES;
573 | GCC_WARN_UNUSED_VARIABLE = YES;
574 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
575 | MTL_ENABLE_DEBUG_INFO = NO;
576 | MTL_FAST_MATH = YES;
577 | PRODUCT_NAME = "$(TARGET_NAME)";
578 | STRIP_INSTALLED_PRODUCT = NO;
579 | SWIFT_COMPILATION_MODE = wholemodule;
580 | SWIFT_OPTIMIZATION_LEVEL = "-O";
581 | SWIFT_VERSION = 5.0;
582 | SYMROOT = "${SRCROOT}/../build";
583 | };
584 | name = Release;
585 | };
586 | 916E0404255105F480DC4950B7625F7A /* Debug */ = {
587 | isa = XCBuildConfiguration;
588 | buildSettings = {
589 | ALWAYS_SEARCH_USER_PATHS = NO;
590 | CLANG_ANALYZER_NONNULL = YES;
591 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
592 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
593 | CLANG_CXX_LIBRARY = "libc++";
594 | CLANG_ENABLE_MODULES = YES;
595 | CLANG_ENABLE_OBJC_ARC = YES;
596 | CLANG_ENABLE_OBJC_WEAK = YES;
597 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
598 | CLANG_WARN_BOOL_CONVERSION = YES;
599 | CLANG_WARN_COMMA = YES;
600 | CLANG_WARN_CONSTANT_CONVERSION = YES;
601 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
602 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
603 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
604 | CLANG_WARN_EMPTY_BODY = YES;
605 | CLANG_WARN_ENUM_CONVERSION = YES;
606 | CLANG_WARN_INFINITE_RECURSION = YES;
607 | CLANG_WARN_INT_CONVERSION = YES;
608 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
609 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
610 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
611 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
612 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
613 | CLANG_WARN_STRICT_PROTOTYPES = YES;
614 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
615 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
616 | CLANG_WARN_UNREACHABLE_CODE = YES;
617 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
618 | COPY_PHASE_STRIP = NO;
619 | DEBUG_INFORMATION_FORMAT = dwarf;
620 | ENABLE_STRICT_OBJC_MSGSEND = YES;
621 | ENABLE_TESTABILITY = YES;
622 | GCC_C_LANGUAGE_STANDARD = gnu11;
623 | GCC_DYNAMIC_NO_PIC = NO;
624 | GCC_NO_COMMON_BLOCKS = YES;
625 | GCC_OPTIMIZATION_LEVEL = 0;
626 | GCC_PREPROCESSOR_DEFINITIONS = (
627 | "POD_CONFIGURATION_DEBUG=1",
628 | "DEBUG=1",
629 | "$(inherited)",
630 | );
631 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
632 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
633 | GCC_WARN_UNDECLARED_SELECTOR = YES;
634 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
635 | GCC_WARN_UNUSED_FUNCTION = YES;
636 | GCC_WARN_UNUSED_VARIABLE = YES;
637 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
638 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
639 | MTL_FAST_MATH = YES;
640 | ONLY_ACTIVE_ARCH = YES;
641 | PRODUCT_NAME = "$(TARGET_NAME)";
642 | STRIP_INSTALLED_PRODUCT = NO;
643 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
644 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
645 | SWIFT_VERSION = 5.0;
646 | SYMROOT = "${SRCROOT}/../build";
647 | };
648 | name = Debug;
649 | };
650 | A6DE527864AD3AB69A1AE0C3CF331470 /* Release */ = {
651 | isa = XCBuildConfiguration;
652 | baseConfigurationReference = D5AC87EDA31BFB1E4ED3E0F902CA2514 /* Pods-TCPickerViewExample.release.xcconfig */;
653 | buildSettings = {
654 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO;
655 | CODE_SIGN_IDENTITY = "";
656 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = "";
657 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
658 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = "";
659 | CURRENT_PROJECT_VERSION = 1;
660 | DEFINES_MODULE = YES;
661 | DYLIB_COMPATIBILITY_VERSION = 1;
662 | DYLIB_CURRENT_VERSION = 1;
663 | DYLIB_INSTALL_NAME_BASE = "@rpath";
664 | INFOPLIST_FILE = "Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-Info.plist";
665 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
666 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
667 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
668 | MACH_O_TYPE = staticlib;
669 | MODULEMAP_FILE = "Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.modulemap";
670 | OTHER_LDFLAGS = "";
671 | OTHER_LIBTOOLFLAGS = "";
672 | PODS_ROOT = "$(SRCROOT)";
673 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}";
674 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
675 | SDKROOT = iphoneos;
676 | SKIP_INSTALL = YES;
677 | TARGETED_DEVICE_FAMILY = "1,2";
678 | VALIDATE_PRODUCT = YES;
679 | VERSIONING_SYSTEM = "apple-generic";
680 | VERSION_INFO_PREFIX = "";
681 | };
682 | name = Release;
683 | };
684 | DB7DFE776C7614D2DA27B694DB227021 /* Debug */ = {
685 | isa = XCBuildConfiguration;
686 | baseConfigurationReference = 99BC1CDE6BE04EC697536C3BEC6999A2 /* TCPickerView.debug.xcconfig */;
687 | buildSettings = {
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 | GCC_PREFIX_HEADER = "Target Support Files/TCPickerView/TCPickerView-prefix.pch";
698 | INFOPLIST_FILE = "Target Support Files/TCPickerView/TCPickerView-Info.plist";
699 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
700 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
701 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
702 | MODULEMAP_FILE = "Target Support Files/TCPickerView/TCPickerView.modulemap";
703 | PRODUCT_MODULE_NAME = TCPickerView;
704 | PRODUCT_NAME = TCPickerView;
705 | SDKROOT = iphoneos;
706 | SKIP_INSTALL = YES;
707 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) ";
708 | SWIFT_VERSION = 5.0;
709 | TARGETED_DEVICE_FAMILY = "1,2";
710 | VERSIONING_SYSTEM = "apple-generic";
711 | VERSION_INFO_PREFIX = "";
712 | };
713 | name = Debug;
714 | };
715 | /* End XCBuildConfiguration section */
716 |
717 | /* Begin XCConfigurationList section */
718 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = {
719 | isa = XCConfigurationList;
720 | buildConfigurations = (
721 | 916E0404255105F480DC4950B7625F7A /* Debug */,
722 | 8F17DC3A99F99FBAD606CE6963886315 /* Release */,
723 | );
724 | defaultConfigurationIsVisible = 0;
725 | defaultConfigurationName = Release;
726 | };
727 | 6A08640CBD60D2B62D3C987896C20F55 /* Build configuration list for PBXNativeTarget "TCPickerView-TCPickerView" */ = {
728 | isa = XCConfigurationList;
729 | buildConfigurations = (
730 | 87593402EF1A5D055422C5411ACD84F8 /* Debug */,
731 | 1AA6EDC016D4CD859699B6CF7053DC59 /* Release */,
732 | );
733 | defaultConfigurationIsVisible = 0;
734 | defaultConfigurationName = Release;
735 | };
736 | C876D5EE424779512372D7BCE0DA0C39 /* Build configuration list for PBXNativeTarget "TCPickerView" */ = {
737 | isa = XCConfigurationList;
738 | buildConfigurations = (
739 | DB7DFE776C7614D2DA27B694DB227021 /* Debug */,
740 | 73D8E55E8E1F582C35CD4C36FAA8F473 /* Release */,
741 | );
742 | defaultConfigurationIsVisible = 0;
743 | defaultConfigurationName = Release;
744 | };
745 | CC491539EC0C8666CE2FD8113A6D3323 /* Build configuration list for PBXNativeTarget "Pods-TCPickerViewExample" */ = {
746 | isa = XCConfigurationList;
747 | buildConfigurations = (
748 | 2A7733A082756080A3A3F0BE48D21199 /* Debug */,
749 | A6DE527864AD3AB69A1AE0C3CF331470 /* Release */,
750 | );
751 | defaultConfigurationIsVisible = 0;
752 | defaultConfigurationName = Release;
753 | };
754 | /* End XCConfigurationList section */
755 | };
756 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */;
757 | }
758 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Pods.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcschemes/Pods-TCPickerViewExample.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
54 |
55 |
56 |
57 |
58 |
59 |
65 |
66 |
68 |
69 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Pods.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcschemes/TCPickerView-TCPickerView.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Pods.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcschemes/TCPickerView.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
45 |
46 |
52 |
53 |
55 |
56 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Pods.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pods-TCPickerViewExample.xcscheme
8 |
9 | isShown
10 |
11 | orderHint
12 | 0
13 |
14 | TCPickerView-TCPickerView.xcscheme
15 |
16 | isShown
17 |
18 | orderHint
19 | 2
20 |
21 | TCPickerView.xcscheme
22 |
23 | isShown
24 |
25 | orderHint
26 | 1
27 |
28 |
29 | SuppressBuildableAutocreation
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## TCPickerView
5 |
6 | MIT License
7 |
8 | Copyright (c) 2017 Taras Chernyshenko
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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-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) 2017 Taras Chernyshenko
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 | TCPickerView
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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_TCPickerViewExample : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_TCPickerViewExample
5 | @end
6 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-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[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --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 | warn_missing_arch=${2:-true}
88 | if [ -r "$source" ]; then
89 | # Copy the dSYM into the targets temp dir.
90 | 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}\""
91 | 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}"
92 |
93 | local basename
94 | basename="$(basename -s .dSYM "$source")"
95 | binary_name="$(ls "$source/Contents/Resources/DWARF")"
96 | binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}"
97 |
98 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
99 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then
100 | strip_invalid_archs "$binary" "$warn_missing_arch"
101 | fi
102 |
103 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
104 | # Move the stripped file into its final destination.
105 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
106 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
107 | else
108 | # 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.
109 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM"
110 | fi
111 | fi
112 | }
113 |
114 | # Copies the bcsymbolmap files of a vendored framework
115 | install_bcsymbolmap() {
116 | local bcsymbolmap_path="$1"
117 | local destination="${BUILT_PRODUCTS_DIR}"
118 | 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}""
119 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"
120 | }
121 |
122 | # Signs a framework with the provided identity
123 | code_sign_if_enabled() {
124 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
125 | # Use the current code_sign_identity
126 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
127 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
128 |
129 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
130 | code_sign_cmd="$code_sign_cmd &"
131 | fi
132 | echo "$code_sign_cmd"
133 | eval "$code_sign_cmd"
134 | fi
135 | }
136 |
137 | # Strip invalid architectures
138 | strip_invalid_archs() {
139 | binary="$1"
140 | warn_missing_arch=${2:-true}
141 | # Get architectures for current target binary
142 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
143 | # Intersect them with the architectures we are building for
144 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
145 | # If there are no archs supported by this binary then warn the user
146 | if [[ -z "$intersected_archs" ]]; then
147 | if [[ "$warn_missing_arch" == "true" ]]; then
148 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
149 | fi
150 | STRIP_BINARY_RETVAL=0
151 | return
152 | fi
153 | stripped=""
154 | for arch in $binary_archs; do
155 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
156 | # Strip non-valid architectures in-place
157 | lipo -remove "$arch" -output "$binary" "$binary"
158 | stripped="$stripped $arch"
159 | fi
160 | done
161 | if [[ "$stripped" ]]; then
162 | echo "Stripped $binary of architectures:$stripped"
163 | fi
164 | STRIP_BINARY_RETVAL=1
165 | }
166 |
167 | install_artifact() {
168 | artifact="$1"
169 | base="$(basename "$artifact")"
170 | case $base in
171 | *.framework)
172 | install_framework "$artifact"
173 | ;;
174 | *.dSYM)
175 | # Suppress arch warnings since XCFrameworks will include many dSYM files
176 | install_dsym "$artifact" "false"
177 | ;;
178 | *.bcsymbolmap)
179 | install_bcsymbolmap "$artifact"
180 | ;;
181 | *)
182 | echo "error: Unrecognized artifact "$artifact""
183 | ;;
184 | esac
185 | }
186 |
187 | copy_artifacts() {
188 | file_list="$1"
189 | while read artifact; do
190 | install_artifact "$artifact"
191 | done <$file_list
192 | }
193 |
194 | ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt"
195 | if [ -r "${ARTIFACT_LIST_FILE}" ]; then
196 | copy_artifacts "${ARTIFACT_LIST_FILE}"
197 | fi
198 |
199 | if [[ "$CONFIGURATION" == "Debug" ]]; then
200 | install_framework "${BUILT_PRODUCTS_DIR}/TCPickerView/TCPickerView.framework"
201 | fi
202 | if [[ "$CONFIGURATION" == "Release" ]]; then
203 | install_framework "${BUILT_PRODUCTS_DIR}/TCPickerView/TCPickerView.framework"
204 | fi
205 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
206 | wait
207 | fi
208 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
8 | # resources to, so exit 0 (signalling the script phase was successful).
9 | exit 0
10 | fi
11 |
12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
13 |
14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
15 | > "$RESOURCES_TO_COPY"
16 |
17 | XCASSET_FILES=()
18 |
19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
22 |
23 | case "${TARGETED_DEVICE_FAMILY:-}" in
24 | 1,2)
25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
26 | ;;
27 | 1)
28 | TARGET_DEVICE_ARGS="--target-device iphone"
29 | ;;
30 | 2)
31 | TARGET_DEVICE_ARGS="--target-device ipad"
32 | ;;
33 | 3)
34 | TARGET_DEVICE_ARGS="--target-device tv"
35 | ;;
36 | 4)
37 | TARGET_DEVICE_ARGS="--target-device watch"
38 | ;;
39 | *)
40 | TARGET_DEVICE_ARGS="--target-device mac"
41 | ;;
42 | esac
43 |
44 | install_resource()
45 | {
46 | if [[ "$1" = /* ]] ; then
47 | RESOURCE_PATH="$1"
48 | else
49 | RESOURCE_PATH="${PODS_ROOT}/$1"
50 | fi
51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
52 | cat << EOM
53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
54 | EOM
55 | exit 1
56 | fi
57 | case $RESOURCE_PATH in
58 | *.storyboard)
59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
61 | ;;
62 | *.xib)
63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
65 | ;;
66 | *.framework)
67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
71 | ;;
72 | *.xcdatamodel)
73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
75 | ;;
76 | *.xcdatamodeld)
77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
79 | ;;
80 | *.xcmappingmodel)
81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
83 | ;;
84 | *.xcassets)
85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
87 | ;;
88 | *)
89 | echo "$RESOURCE_PATH" || true
90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
91 | ;;
92 | esac
93 | }
94 |
95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
100 | fi
101 | rm -f "$RESOURCES_TO_COPY"
102 |
103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
104 | then
105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
107 | while read line; do
108 | if [[ $line != "${PODS_ROOT}*" ]]; then
109 | XCASSET_FILES+=("$line")
110 | fi
111 | done <<<"$OTHER_XCASSETS"
112 |
113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
115 | else
116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
117 | fi
118 | fi
119 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-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_TCPickerViewExampleVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_TCPickerViewExampleVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.debug.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TCPickerView"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TCPickerView/TCPickerView.framework/Headers"
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_LDFLAGS = $(inherited) -framework "TCPickerView"
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 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_TCPickerViewExample {
2 | umbrella header "Pods-TCPickerViewExample-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.release.xcconfig:
--------------------------------------------------------------------------------
1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TCPickerView"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/TCPickerView/TCPickerView.framework/Headers"
5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
6 | OTHER_LDFLAGS = $(inherited) -framework "TCPickerView"
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 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
13 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | ${PRODUCT_BUNDLE_IDENTIFIER}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | ${PRODUCT_NAME}
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 0.2.5
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/ResourceBundle-TCPickerView-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleIdentifier
8 | ${PRODUCT_BUNDLE_IDENTIFIER}
9 | CFBundleInfoDictionaryVersion
10 | 6.0
11 | CFBundleName
12 | ${PRODUCT_NAME}
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 0.2.5
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/TCPickerView-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_TCPickerView : NSObject
3 | @end
4 | @implementation PodsDummy_TCPickerView
5 | @end
6 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/TCPickerView-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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/TCPickerView-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 TCPickerViewVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char TCPickerViewVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/TCPickerView.modulemap:
--------------------------------------------------------------------------------
1 | framework module TCPickerView {
2 | umbrella header "TCPickerView-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/TCPickerView/Example/Pods/Target Support Files/TCPickerView/TCPickerView.xcconfig:
--------------------------------------------------------------------------------
1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/TCPickerView
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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 9/4/17.
6 | // Copyright © 2017 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
17 | // Override point for customization after application launch.
18 | return true
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/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 | }
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Assets.xcassets/andrew.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "andrew.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Assets.xcassets/andrew.imageset/andrew.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChernyshenkoTaras/TCPickerView/815c37f72ed368ab50a6d4ac7729dea49676e610/TCPickerView/Example/TCPickerView/Assets.xcassets/andrew.imageset/andrew.png
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Assets.xcassets/checkmark_icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "checkmark_icon.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Assets.xcassets/checkmark_icon.imageset/checkmark_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChernyshenkoTaras/TCPickerView/815c37f72ed368ab50a6d4ac7729dea49676e610/TCPickerView/Example/TCPickerView/Assets.xcassets/checkmark_icon.imageset/checkmark_icon.png
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/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 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/DarkViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CustomCellViewController.swift
3 | // TCPickerViewExample
4 | //
5 | // Created by Taras Chernyshenko on 6/11/18.
6 | // Copyright © 2018 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import TCPickerView
11 |
12 | class DarkViewController: UIViewController, TCPickerViewOutput {
13 | @IBOutlet private weak var avatarImageView: UIImageView!
14 |
15 | private var filteredCars: [String] = []
16 | private let theme = TCPickerViewDarkTheme()
17 | @IBAction private func showButtonPressed(button: UIButton) {
18 | let screenWidth: CGFloat = UIScreen.main.bounds.width
19 | let width: CGFloat = screenWidth - 64
20 | let height: CGFloat = 500
21 | var picker: TCPickerViewInput = TCPickerView(size: CGSize(width: width, height: height))
22 | picker.title = "Cars"
23 | let cars = [
24 | "Chevrolet Bolt EV",
25 | "Subaru WRX",
26 | "Porsche Panamera",
27 | "BMW 330e",
28 | "Chevrolet Volt",
29 | "Ford C-Max Hybrid",
30 | "Ford Focus"
31 | ]
32 | filteredCars = cars
33 | let values = cars.map { TCPickerView.Value(title: $0) }
34 | picker.values = values
35 | picker.theme = self.theme
36 | picker.delegate = self
37 | picker.selection = .multiply
38 | picker.isSearchEnabled = true
39 | picker.register(UINib(nibName: "ExampleTableViewCell", bundle: nil), forCellReuseIdentifier: "ExampleTableViewCell")
40 | picker.completion = { [unowned self] selectedIndexes in
41 | for i in selectedIndexes {
42 | print(self.filteredCars[i])
43 | }
44 | }
45 | picker.searchResult = { [unowned self] searchText in
46 | self.filteredCars = cars.filter { $0.contains(searchText) }
47 | let values = filteredCars.map { TCPickerView.Value(title: $0) }
48 | picker.values = values
49 | }
50 | picker.show()
51 | }
52 |
53 | override var preferredStatusBarStyle: UIStatusBarStyle {
54 | return .lightContent
55 | }
56 |
57 | //MARK: TCPickerViewDelegate methods
58 |
59 | func pickerView(_ pickerView: TCPickerViewInput, didSelectRowAtIndex index: Int) {
60 | print("User select row at index: \(index)")
61 | }
62 |
63 | func pickerView(_ pickerView: TCPickerViewInput,
64 | cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)? {
65 | let cell = pickerView.dequeue(withIdentifier: "ExampleTableViewCell", for: indexPath) as! ExampleTableViewCell
66 | cell.titleLabel?.textColor = self.theme.textColor
67 | cell.checkmarkImageView?.image = UIImage(named: "checkmark_icon")?.withRenderingMode(.alwaysTemplate)
68 | cell.checkmarkImageView?.tintColor = self.theme.textColor
69 | cell.backgroundColor = self.theme.mainColor
70 | return cell
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Images/PickerView_1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChernyshenkoTaras/TCPickerView/815c37f72ed368ab50a6d4ac7729dea49676e610/TCPickerView/Example/TCPickerView/Images/PickerView_1.gif
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/Images/PickerView_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChernyshenkoTaras/TCPickerView/815c37f72ed368ab50a6d4ac7729dea49676e610/TCPickerView/Example/TCPickerView/Images/PickerView_2.png
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/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 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UIStatusBarStyle
32 | UIStatusBarStyleLightContent
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/LightViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LightViewController.swift
3 | // TCPickerViewExample
4 | //
5 | // Created by Taras Chernyshenko on 6/13/18.
6 | // Copyright © 2018 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import TCPickerView
11 |
12 | class LightViewController: UIViewController, TCPickerViewOutput {
13 |
14 | @IBOutlet private weak var avatarImageView: UIImageView!
15 |
16 | private let theme = TCPickerViewLightTheme()
17 | @IBAction private func showButtonPressed(button: UIButton) {
18 | let screenWidth: CGFloat = UIScreen.main.bounds.width
19 | let width: CGFloat = screenWidth - 64
20 | let height: CGFloat = 500
21 | var picker: TCPickerViewInput = TCPickerView(size: CGSize(width: width, height: height))
22 | picker.title = "Cars"
23 | let cars = [
24 | "Chevrolet Bolt EV",
25 | "Subaru WRX",
26 | "Porsche Panamera",
27 | "BMW 330e",
28 | "Chevrolet Volt",
29 | "Ford C-Max Hybrid",
30 | "Ford Focus"
31 | ]
32 | let values = cars.map { TCPickerView.Value(title: $0) }
33 | picker.values = values
34 | picker.theme = self.theme
35 | picker.delegate = self
36 | picker.selection = .multiply
37 | picker.register(UINib(nibName: "ExampleTableViewCell", bundle: nil), forCellReuseIdentifier: "ExampleTableViewCell")
38 | picker.completion = { (selectedIndexes) in
39 | for i in selectedIndexes {
40 | print(values[i].title)
41 | }
42 | }
43 | picker.closeAction = {
44 | print("Handle close action here")
45 | }
46 | picker.show()
47 | }
48 |
49 | override var preferredStatusBarStyle: UIStatusBarStyle {
50 | return .lightContent
51 | }
52 | //MARK: TCPickerViewDelegate methods
53 |
54 | func pickerView(_ pickerView: TCPickerViewInput, didSelectRowAtIndex index: Int) {
55 | print("Uuser select row at index: \(index)")
56 | }
57 |
58 | func pickerView(_ pickerView: TCPickerViewInput,
59 | cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)? {
60 | let cell = pickerView.dequeue(withIdentifier: "ExampleTableViewCell", for: indexPath) as! ExampleTableViewCell
61 | cell.titleLabel?.textColor = self.theme.textColor
62 | cell.checkmarkImageView?.image = UIImage(named: "checkmark_icon")?.withRenderingMode(.alwaysTemplate)
63 | cell.checkmarkImageView?.tintColor = self.theme.textColor
64 | cell.backgroundColor = self.theme.mainColor
65 | return cell
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/View/ExampleTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExampleTableViewCell.swift
3 | // TCPickerViewExample
4 | //
5 | // Created by Taras Chernyshenko on 6/11/18.
6 | // Copyright © 2018 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import TCPickerView
11 |
12 | class ExampleTableViewCell: UITableViewCell, TCPickerCellType {
13 | var viewModel: TCPickerModel? {
14 | didSet {
15 | self.updateUI()
16 | }
17 | }
18 |
19 | @IBOutlet weak var titleLabel: UILabel?
20 | @IBOutlet weak var checkmarkImageView: UIImageView?
21 |
22 | override func layoutSubviews() {
23 | super.layoutSubviews()
24 | self.updateUI()
25 | }
26 |
27 | override func awakeFromNib() {
28 | super.awakeFromNib()
29 | self.tintColor = .clear
30 | self.selectionStyle = .none
31 | }
32 |
33 | func updateUI() {
34 | guard let viewModel = self.viewModel else {
35 | return
36 | }
37 | self.titleLabel?.text = viewModel.title
38 | self.checkmarkImageView?.isHidden = !viewModel.isChecked
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/View/ExampleTableViewCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
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 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerView/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 9/4/17.
6 | // Copyright © 2017 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import TCPickerView
11 |
12 | class ViewController: UIViewController, TCPickerViewOutput {
13 | @IBAction private func showButtonPressed(button: UIButton) {
14 | var picker: TCPickerViewInput = TCPickerView()
15 | picker.title = "Cars"
16 | let cars = [
17 | "Chevrolet Bolt EV",
18 | "Subaru WRX",
19 | "Porsche Panamera",
20 | "BMW 330e",
21 | "Chevrolet Volt",
22 | "Ford C-Max Hybrid",
23 | "Ford Focus"
24 | ]
25 | let values = cars.map { TCPickerView.Value(title: $0) }
26 | picker.values = values
27 | picker.delegate = self
28 | picker.selection = .single
29 | picker.completion = { (selectedIndexes) in
30 | for i in selectedIndexes {
31 | print(values[i].title)
32 | }
33 | }
34 | picker.show()
35 | }
36 |
37 | //MARK: TCPickerViewDelegate methods
38 |
39 | func pickerView(_ pickerView: TCPickerViewInput, didSelectRowAtIndex index: Int) {
40 | print("Uuser select row at index: \(index)")
41 | }
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0578BBBA47E0AC183DECF4CF /* Pods_TCPickerViewExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6D3D5255C2AAE62C7622406 /* Pods_TCPickerViewExample.framework */; };
11 | 2F6330841F5D6D830086584B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6330831F5D6D830086584B /* AppDelegate.swift */; };
12 | 2F6330861F5D6D830086584B /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F6330851F5D6D830086584B /* ViewController.swift */; };
13 | 2F6330891F5D6D830086584B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F6330871F5D6D830086584B /* Main.storyboard */; };
14 | 2F63308B1F5D6D830086584B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2F63308A1F5D6D830086584B /* Assets.xcassets */; };
15 | 2F63308E1F5D6D830086584B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2F63308C1F5D6D830086584B /* LaunchScreen.storyboard */; };
16 | 635BFD2A20D154F30075967A /* LightViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 635BFD2920D154F30075967A /* LightViewController.swift */; };
17 | 63B4522420CE6DED00A5CB13 /* ExampleTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63B4522320CE6DED00A5CB13 /* ExampleTableViewCell.xib */; };
18 | 63B4522620CE6E5800A5CB13 /* ExampleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B4522520CE6E5800A5CB13 /* ExampleTableViewCell.swift */; };
19 | 63B4522920CE74A600A5CB13 /* DarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B4522820CE74A600A5CB13 /* DarkViewController.swift */; };
20 | /* End PBXBuildFile section */
21 |
22 | /* Begin PBXFileReference section */
23 | 2F6330801F5D6D830086584B /* TCPickerViewExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TCPickerViewExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
24 | 2F6330831F5D6D830086584B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
25 | 2F6330851F5D6D830086584B /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
26 | 2F6330881F5D6D830086584B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
27 | 2F63308A1F5D6D830086584B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
28 | 2F63308D1F5D6D830086584B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
29 | 2F63308F1F5D6D830086584B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
30 | 545A352FB6EEF45689F1E140 /* Pods-TCPickerView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCPickerView.release.xcconfig"; path = "Pods/Target Support Files/Pods-TCPickerView/Pods-TCPickerView.release.xcconfig"; sourceTree = ""; };
31 | 635BFD2920D154F30075967A /* LightViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightViewController.swift; sourceTree = ""; };
32 | 63B4522320CE6DED00A5CB13 /* ExampleTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ExampleTableViewCell.xib; sourceTree = ""; };
33 | 63B4522520CE6E5800A5CB13 /* ExampleTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleTableViewCell.swift; sourceTree = ""; };
34 | 63B4522820CE74A600A5CB13 /* DarkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DarkViewController.swift; sourceTree = ""; };
35 | 6BA6994F974C6B1A18114BAA /* Pods_TCPickerView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCPickerView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
36 | 78271278690115EFA7B6D75A /* Pods-TCPickerView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCPickerView.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TCPickerView/Pods-TCPickerView.debug.xcconfig"; sourceTree = ""; };
37 | B6D3D5255C2AAE62C7622406 /* Pods_TCPickerViewExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TCPickerViewExample.framework; sourceTree = BUILT_PRODUCTS_DIR; };
38 | D80C568EFC6FDFA0382953FA /* Pods-TCPickerViewExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCPickerViewExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.debug.xcconfig"; sourceTree = ""; };
39 | DF49581795309993C432083C /* Pods-TCPickerViewExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TCPickerViewExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample.release.xcconfig"; sourceTree = ""; };
40 | /* End PBXFileReference section */
41 |
42 | /* Begin PBXFrameworksBuildPhase section */
43 | 2F63307D1F5D6D830086584B /* Frameworks */ = {
44 | isa = PBXFrameworksBuildPhase;
45 | buildActionMask = 2147483647;
46 | files = (
47 | 0578BBBA47E0AC183DECF4CF /* Pods_TCPickerViewExample.framework in Frameworks */,
48 | );
49 | runOnlyForDeploymentPostprocessing = 0;
50 | };
51 | /* End PBXFrameworksBuildPhase section */
52 |
53 | /* Begin PBXGroup section */
54 | 1D31E4933F010D66E04C4E1F /* Pods */ = {
55 | isa = PBXGroup;
56 | children = (
57 | 78271278690115EFA7B6D75A /* Pods-TCPickerView.debug.xcconfig */,
58 | 545A352FB6EEF45689F1E140 /* Pods-TCPickerView.release.xcconfig */,
59 | D80C568EFC6FDFA0382953FA /* Pods-TCPickerViewExample.debug.xcconfig */,
60 | DF49581795309993C432083C /* Pods-TCPickerViewExample.release.xcconfig */,
61 | );
62 | name = Pods;
63 | sourceTree = "";
64 | };
65 | 2F6330771F5D6D830086584B = {
66 | isa = PBXGroup;
67 | children = (
68 | 2F6330821F5D6D830086584B /* TCPickerView */,
69 | 2F6330811F5D6D830086584B /* Products */,
70 | 1D31E4933F010D66E04C4E1F /* Pods */,
71 | F65BC6F9159B8E9D49AA973E /* Frameworks */,
72 | );
73 | sourceTree = "";
74 | };
75 | 2F6330811F5D6D830086584B /* Products */ = {
76 | isa = PBXGroup;
77 | children = (
78 | 2F6330801F5D6D830086584B /* TCPickerViewExample.app */,
79 | );
80 | name = Products;
81 | sourceTree = "";
82 | };
83 | 2F6330821F5D6D830086584B /* TCPickerView */ = {
84 | isa = PBXGroup;
85 | children = (
86 | 63B4522720CE71C800A5CB13 /* View */,
87 | 2F6330831F5D6D830086584B /* AppDelegate.swift */,
88 | 2F6330851F5D6D830086584B /* ViewController.swift */,
89 | 63B4522820CE74A600A5CB13 /* DarkViewController.swift */,
90 | 635BFD2920D154F30075967A /* LightViewController.swift */,
91 | 2F6330871F5D6D830086584B /* Main.storyboard */,
92 | 2F63308A1F5D6D830086584B /* Assets.xcassets */,
93 | 2F63308C1F5D6D830086584B /* LaunchScreen.storyboard */,
94 | 2F63308F1F5D6D830086584B /* Info.plist */,
95 | );
96 | path = TCPickerView;
97 | sourceTree = "";
98 | };
99 | 63B4522720CE71C800A5CB13 /* View */ = {
100 | isa = PBXGroup;
101 | children = (
102 | 63B4522320CE6DED00A5CB13 /* ExampleTableViewCell.xib */,
103 | 63B4522520CE6E5800A5CB13 /* ExampleTableViewCell.swift */,
104 | );
105 | path = View;
106 | sourceTree = "";
107 | };
108 | F65BC6F9159B8E9D49AA973E /* Frameworks */ = {
109 | isa = PBXGroup;
110 | children = (
111 | 6BA6994F974C6B1A18114BAA /* Pods_TCPickerView.framework */,
112 | B6D3D5255C2AAE62C7622406 /* Pods_TCPickerViewExample.framework */,
113 | );
114 | name = Frameworks;
115 | sourceTree = "";
116 | };
117 | /* End PBXGroup section */
118 |
119 | /* Begin PBXNativeTarget section */
120 | 2F63307F1F5D6D830086584B /* TCPickerViewExample */ = {
121 | isa = PBXNativeTarget;
122 | buildConfigurationList = 2F6330921F5D6D830086584B /* Build configuration list for PBXNativeTarget "TCPickerViewExample" */;
123 | buildPhases = (
124 | C4C439CCE6BF427BC221DE50 /* [CP] Check Pods Manifest.lock */,
125 | 2F63307C1F5D6D830086584B /* Sources */,
126 | 2F63307D1F5D6D830086584B /* Frameworks */,
127 | 2F63307E1F5D6D830086584B /* Resources */,
128 | D2AEE94ACE1AD6B65DD559F5 /* [CP] Embed Pods Frameworks */,
129 | );
130 | buildRules = (
131 | );
132 | dependencies = (
133 | );
134 | name = TCPickerViewExample;
135 | productName = TCPickerView;
136 | productReference = 2F6330801F5D6D830086584B /* TCPickerViewExample.app */;
137 | productType = "com.apple.product-type.application";
138 | };
139 | /* End PBXNativeTarget section */
140 |
141 | /* Begin PBXProject section */
142 | 2F6330781F5D6D830086584B /* Project object */ = {
143 | isa = PBXProject;
144 | attributes = {
145 | LastSwiftUpdateCheck = 0900;
146 | LastUpgradeCheck = 0930;
147 | ORGANIZATIONNAME = "Taras Chernyshenko";
148 | TargetAttributes = {
149 | 2F63307F1F5D6D830086584B = {
150 | CreatedOnToolsVersion = 9.0;
151 | LastSwiftMigration = 1110;
152 | ProvisioningStyle = Automatic;
153 | };
154 | };
155 | };
156 | buildConfigurationList = 2F63307B1F5D6D830086584B /* Build configuration list for PBXProject "TCPickerViewExample" */;
157 | compatibilityVersion = "Xcode 8.0";
158 | developmentRegion = en;
159 | hasScannedForEncodings = 0;
160 | knownRegions = (
161 | en,
162 | Base,
163 | );
164 | mainGroup = 2F6330771F5D6D830086584B;
165 | productRefGroup = 2F6330811F5D6D830086584B /* Products */;
166 | projectDirPath = "";
167 | projectRoot = "";
168 | targets = (
169 | 2F63307F1F5D6D830086584B /* TCPickerViewExample */,
170 | );
171 | };
172 | /* End PBXProject section */
173 |
174 | /* Begin PBXResourcesBuildPhase section */
175 | 2F63307E1F5D6D830086584B /* Resources */ = {
176 | isa = PBXResourcesBuildPhase;
177 | buildActionMask = 2147483647;
178 | files = (
179 | 63B4522420CE6DED00A5CB13 /* ExampleTableViewCell.xib in Resources */,
180 | 2F63308E1F5D6D830086584B /* LaunchScreen.storyboard in Resources */,
181 | 2F63308B1F5D6D830086584B /* Assets.xcassets in Resources */,
182 | 2F6330891F5D6D830086584B /* Main.storyboard in Resources */,
183 | );
184 | runOnlyForDeploymentPostprocessing = 0;
185 | };
186 | /* End PBXResourcesBuildPhase section */
187 |
188 | /* Begin PBXShellScriptBuildPhase section */
189 | C4C439CCE6BF427BC221DE50 /* [CP] Check Pods Manifest.lock */ = {
190 | isa = PBXShellScriptBuildPhase;
191 | buildActionMask = 2147483647;
192 | files = (
193 | );
194 | inputPaths = (
195 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
196 | "${PODS_ROOT}/Manifest.lock",
197 | );
198 | name = "[CP] Check Pods Manifest.lock";
199 | outputPaths = (
200 | "$(DERIVED_FILE_DIR)/Pods-TCPickerViewExample-checkManifestLockResult.txt",
201 | );
202 | runOnlyForDeploymentPostprocessing = 0;
203 | shellPath = /bin/sh;
204 | 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";
205 | showEnvVarsInLog = 0;
206 | };
207 | D2AEE94ACE1AD6B65DD559F5 /* [CP] Embed Pods Frameworks */ = {
208 | isa = PBXShellScriptBuildPhase;
209 | buildActionMask = 2147483647;
210 | files = (
211 | );
212 | inputPaths = (
213 | "${PODS_ROOT}/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-frameworks.sh",
214 | "${BUILT_PRODUCTS_DIR}/TCPickerView/TCPickerView.framework",
215 | );
216 | name = "[CP] Embed Pods Frameworks";
217 | outputPaths = (
218 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/TCPickerView.framework",
219 | );
220 | runOnlyForDeploymentPostprocessing = 0;
221 | shellPath = /bin/sh;
222 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-TCPickerViewExample/Pods-TCPickerViewExample-frameworks.sh\"\n";
223 | showEnvVarsInLog = 0;
224 | };
225 | /* End PBXShellScriptBuildPhase section */
226 |
227 | /* Begin PBXSourcesBuildPhase section */
228 | 2F63307C1F5D6D830086584B /* Sources */ = {
229 | isa = PBXSourcesBuildPhase;
230 | buildActionMask = 2147483647;
231 | files = (
232 | 2F6330861F5D6D830086584B /* ViewController.swift in Sources */,
233 | 2F6330841F5D6D830086584B /* AppDelegate.swift in Sources */,
234 | 63B4522620CE6E5800A5CB13 /* ExampleTableViewCell.swift in Sources */,
235 | 63B4522920CE74A600A5CB13 /* DarkViewController.swift in Sources */,
236 | 635BFD2A20D154F30075967A /* LightViewController.swift in Sources */,
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | /* End PBXSourcesBuildPhase section */
241 |
242 | /* Begin PBXVariantGroup section */
243 | 2F6330871F5D6D830086584B /* Main.storyboard */ = {
244 | isa = PBXVariantGroup;
245 | children = (
246 | 2F6330881F5D6D830086584B /* Base */,
247 | );
248 | name = Main.storyboard;
249 | sourceTree = "";
250 | };
251 | 2F63308C1F5D6D830086584B /* LaunchScreen.storyboard */ = {
252 | isa = PBXVariantGroup;
253 | children = (
254 | 2F63308D1F5D6D830086584B /* Base */,
255 | );
256 | name = LaunchScreen.storyboard;
257 | sourceTree = "";
258 | };
259 | /* End PBXVariantGroup section */
260 |
261 | /* Begin XCBuildConfiguration section */
262 | 2F6330901F5D6D830086584B /* Debug */ = {
263 | isa = XCBuildConfiguration;
264 | buildSettings = {
265 | ALWAYS_SEARCH_USER_PATHS = NO;
266 | CLANG_ANALYZER_NONNULL = YES;
267 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
268 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
269 | CLANG_CXX_LIBRARY = "libc++";
270 | CLANG_ENABLE_MODULES = YES;
271 | CLANG_ENABLE_OBJC_ARC = YES;
272 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
273 | CLANG_WARN_BOOL_CONVERSION = YES;
274 | CLANG_WARN_COMMA = YES;
275 | CLANG_WARN_CONSTANT_CONVERSION = YES;
276 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
277 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
278 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
279 | CLANG_WARN_EMPTY_BODY = YES;
280 | CLANG_WARN_ENUM_CONVERSION = YES;
281 | CLANG_WARN_INFINITE_RECURSION = YES;
282 | CLANG_WARN_INT_CONVERSION = YES;
283 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
284 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
285 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
286 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
287 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
288 | CLANG_WARN_STRICT_PROTOTYPES = YES;
289 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
290 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
291 | CLANG_WARN_UNREACHABLE_CODE = YES;
292 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
293 | CODE_SIGN_IDENTITY = "iPhone Developer";
294 | COPY_PHASE_STRIP = NO;
295 | DEBUG_INFORMATION_FORMAT = dwarf;
296 | ENABLE_STRICT_OBJC_MSGSEND = YES;
297 | ENABLE_TESTABILITY = YES;
298 | GCC_C_LANGUAGE_STANDARD = gnu11;
299 | GCC_DYNAMIC_NO_PIC = NO;
300 | GCC_NO_COMMON_BLOCKS = YES;
301 | GCC_OPTIMIZATION_LEVEL = 0;
302 | GCC_PREPROCESSOR_DEFINITIONS = (
303 | "DEBUG=1",
304 | "$(inherited)",
305 | );
306 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
307 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
308 | GCC_WARN_UNDECLARED_SELECTOR = YES;
309 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
310 | GCC_WARN_UNUSED_FUNCTION = YES;
311 | GCC_WARN_UNUSED_VARIABLE = YES;
312 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
313 | MTL_ENABLE_DEBUG_INFO = YES;
314 | ONLY_ACTIVE_ARCH = YES;
315 | SDKROOT = iphoneos;
316 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
317 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
318 | SWIFT_VERSION = 5.0;
319 | };
320 | name = Debug;
321 | };
322 | 2F6330911F5D6D830086584B /* Release */ = {
323 | isa = XCBuildConfiguration;
324 | buildSettings = {
325 | ALWAYS_SEARCH_USER_PATHS = NO;
326 | CLANG_ANALYZER_NONNULL = YES;
327 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
328 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
329 | CLANG_CXX_LIBRARY = "libc++";
330 | CLANG_ENABLE_MODULES = YES;
331 | CLANG_ENABLE_OBJC_ARC = YES;
332 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
333 | CLANG_WARN_BOOL_CONVERSION = YES;
334 | CLANG_WARN_COMMA = YES;
335 | CLANG_WARN_CONSTANT_CONVERSION = YES;
336 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
337 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
338 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
339 | CLANG_WARN_EMPTY_BODY = YES;
340 | CLANG_WARN_ENUM_CONVERSION = YES;
341 | CLANG_WARN_INFINITE_RECURSION = YES;
342 | CLANG_WARN_INT_CONVERSION = YES;
343 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
344 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
345 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
346 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
347 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
348 | CLANG_WARN_STRICT_PROTOTYPES = YES;
349 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
350 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
351 | CLANG_WARN_UNREACHABLE_CODE = YES;
352 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
353 | CODE_SIGN_IDENTITY = "iPhone Developer";
354 | COPY_PHASE_STRIP = NO;
355 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
356 | ENABLE_NS_ASSERTIONS = NO;
357 | ENABLE_STRICT_OBJC_MSGSEND = YES;
358 | GCC_C_LANGUAGE_STANDARD = gnu11;
359 | GCC_NO_COMMON_BLOCKS = YES;
360 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
361 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
362 | GCC_WARN_UNDECLARED_SELECTOR = YES;
363 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
364 | GCC_WARN_UNUSED_FUNCTION = YES;
365 | GCC_WARN_UNUSED_VARIABLE = YES;
366 | IPHONEOS_DEPLOYMENT_TARGET = 11.0;
367 | MTL_ENABLE_DEBUG_INFO = NO;
368 | SDKROOT = iphoneos;
369 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
370 | SWIFT_VERSION = 5.0;
371 | VALIDATE_PRODUCT = YES;
372 | };
373 | name = Release;
374 | };
375 | 2F6330931F5D6D830086584B /* Debug */ = {
376 | isa = XCBuildConfiguration;
377 | baseConfigurationReference = D80C568EFC6FDFA0382953FA /* Pods-TCPickerViewExample.debug.xcconfig */;
378 | buildSettings = {
379 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
380 | CODE_SIGN_STYLE = Automatic;
381 | DEVELOPMENT_TEAM = Z5G3WDJ23W;
382 | INFOPLIST_FILE = TCPickerView/Info.plist;
383 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
384 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
385 | MARKETING_VERSION = 0.2.8;
386 | PRODUCT_BUNDLE_IDENTIFIER = com.app.TCPickerView;
387 | PRODUCT_NAME = "$(TARGET_NAME)";
388 | SWIFT_VERSION = 5.0;
389 | TARGETED_DEVICE_FAMILY = "1,2";
390 | };
391 | name = Debug;
392 | };
393 | 2F6330941F5D6D830086584B /* Release */ = {
394 | isa = XCBuildConfiguration;
395 | baseConfigurationReference = DF49581795309993C432083C /* Pods-TCPickerViewExample.release.xcconfig */;
396 | buildSettings = {
397 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
398 | CODE_SIGN_STYLE = Automatic;
399 | DEVELOPMENT_TEAM = Z5G3WDJ23W;
400 | INFOPLIST_FILE = TCPickerView/Info.plist;
401 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
402 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
403 | MARKETING_VERSION = 0.2.8;
404 | PRODUCT_BUNDLE_IDENTIFIER = com.app.TCPickerView;
405 | PRODUCT_NAME = "$(TARGET_NAME)";
406 | SWIFT_VERSION = 5.0;
407 | TARGETED_DEVICE_FAMILY = "1,2";
408 | };
409 | name = Release;
410 | };
411 | /* End XCBuildConfiguration section */
412 |
413 | /* Begin XCConfigurationList section */
414 | 2F63307B1F5D6D830086584B /* Build configuration list for PBXProject "TCPickerViewExample" */ = {
415 | isa = XCConfigurationList;
416 | buildConfigurations = (
417 | 2F6330901F5D6D830086584B /* Debug */,
418 | 2F6330911F5D6D830086584B /* Release */,
419 | );
420 | defaultConfigurationIsVisible = 0;
421 | defaultConfigurationName = Release;
422 | };
423 | 2F6330921F5D6D830086584B /* Build configuration list for PBXNativeTarget "TCPickerViewExample" */ = {
424 | isa = XCConfigurationList;
425 | buildConfigurations = (
426 | 2F6330931F5D6D830086584B /* Debug */,
427 | 2F6330941F5D6D830086584B /* Release */,
428 | );
429 | defaultConfigurationIsVisible = 0;
430 | defaultConfigurationName = Release;
431 | };
432 | /* End XCConfigurationList section */
433 | };
434 | rootObject = 2F6330781F5D6D830086584B /* Project object */;
435 | }
436 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcodeproj/project.xcworkspace/xcuserdata/taraschernyshenko.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ChernyshenkoTaras/TCPickerView/815c37f72ed368ab50a6d4ac7729dea49676e610/TCPickerView/Example/TCPickerViewExample.xcodeproj/project.xcworkspace/xcuserdata/taraschernyshenko.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcodeproj/xcuserdata/taraschernyshenko.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | TCPickerView.xcscheme
8 |
9 | orderHint
10 | 3
11 |
12 | TCPickerViewExample.xcscheme
13 |
14 | orderHint
15 | 3
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/TCPickerView/Example/TCPickerViewExample.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/NSLayoutConstraint+Additional.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSLayoutConstraint+Additional.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 10/8/20.
6 | //
7 |
8 | import UIKit
9 |
10 | public enum ConstraintIdentifier: String {
11 | case leading, trailing, top, bottom, height, width
12 | }
13 |
14 | public extension NSLayoutDimension {
15 | func constraint(equalToConstant c: CGFloat, identifier: ConstraintIdentifier) -> NSLayoutConstraint {
16 | let constraint = self.constraint(equalToConstant: c)
17 | constraint.identifier = identifier.rawValue
18 | return constraint
19 | }
20 | }
21 |
22 | public extension UIView {
23 | func constraint(withIdentifier: ConstraintIdentifier) -> NSLayoutConstraint? {
24 | return self.constraints.filter{ $0.identifier == withIdentifier.rawValue }.first
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/TCPickerTableViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TCPickerTableViewCell.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 9/4/17.
6 | // Copyright © 2017 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public struct TCPickerModel {
12 | public let title: String
13 | public let isChecked: Bool
14 | }
15 |
16 | public protocol TCPickerCellType {
17 | var viewModel: TCPickerModel? { set get }
18 | func updateUI()
19 | }
20 |
21 | class TCPickerTableViewCell: UITableViewCell, TCPickerCellType {
22 |
23 | var viewModel: TCPickerModel? {
24 | didSet {
25 | self.updateUI()
26 | }
27 | }
28 |
29 | override func layoutSubviews() {
30 | super.layoutSubviews()
31 | self.updateUI()
32 | }
33 |
34 | private var checkmark: UIImage {
35 | var image = UIImage()
36 | let podBundle = Bundle(for: TCPickerView.self)
37 | if let url = podBundle.url(forResource: "TCPickerView", withExtension: "bundle") {
38 | let bundle = Bundle(url: url)
39 | image = UIImage(named: "checkmark_icon", in: bundle, compatibleWith: nil)!
40 | } else {
41 | return UIImage(named: "checkmark_icon")!
42 | }
43 | return image
44 | }
45 | private var titleLabel: UILabel = UILabel(frame: CGRect.zero)
46 | private var checkmarkImageView: UIImageView = UIImageView(frame: CGRect.zero)
47 |
48 | override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
49 | super.init(style: style, reuseIdentifier: reuseIdentifier)
50 | self.setupUI()
51 | }
52 |
53 | required init?(coder aDecoder: NSCoder) {
54 | super.init(coder: aDecoder)
55 | self.setupUI()
56 | }
57 |
58 | fileprivate func initialize() {
59 | self.checkmarkImageView.contentMode = .scaleAspectFit
60 | self.setupUI()
61 | }
62 |
63 | fileprivate func setupUI() {
64 | self.addSubview(titleLabel)
65 | self.addSubview(self.checkmarkImageView)
66 |
67 | self.titleLabel.translatesAutoresizingMaskIntoConstraints = false
68 | self.checkmarkImageView.translatesAutoresizingMaskIntoConstraints = false
69 |
70 | self.checkmarkImageView.addConstraint(NSLayoutConstraint(item: self.checkmarkImageView,
71 | attribute: .height, relatedBy: .equal, toItem: nil,
72 | attribute: .height, multiplier: 1.0, constant: 24))
73 | self.checkmarkImageView.addConstraint(NSLayoutConstraint(item: self.checkmarkImageView,
74 | attribute: .width, relatedBy: .equal, toItem: nil,
75 | attribute: .width, multiplier: 1.0, constant: 24))
76 | self.addConstraint(NSLayoutConstraint(item: self,
77 | attribute: .trailing, relatedBy: .equal, toItem: self.checkmarkImageView,
78 | attribute: .trailing, multiplier: 1.0, constant: 8))
79 | self.addConstraint(NSLayoutConstraint(item: self.checkmarkImageView,
80 | attribute: .centerY, relatedBy: .equal, toItem: self,
81 | attribute: .centerY, multiplier: 1.0, constant: 0))
82 |
83 | self.addConstraint(NSLayoutConstraint(item: self.titleLabel,
84 | attribute: .leading, relatedBy: .equal, toItem: self,
85 | attribute: .leading, multiplier: 1.0, constant: 8))
86 | self.addConstraint(NSLayoutConstraint(item: self.titleLabel,
87 | attribute: .top, relatedBy: .equal, toItem: self,
88 | attribute: .top, multiplier: 1.0, constant: 0))
89 | self.addConstraint(NSLayoutConstraint(item: self.titleLabel,
90 | attribute: .bottom, relatedBy: .equal, toItem: self,
91 | attribute: .bottom, multiplier: 1.0, constant: 0))
92 | self.addConstraint(NSLayoutConstraint(item: self.titleLabel,
93 | attribute: .trailing, relatedBy: .equal, toItem: imageView,
94 | attribute: .leading, multiplier: 1.0, constant: 8))
95 | self.selectionStyle = .none
96 | }
97 |
98 | func updateUI() {
99 | self.titleLabel.text = self.viewModel?.title ?? ""
100 | self.checkmarkImageView.image = self.viewModel?.isChecked == true ?
101 | self.checkmark : UIImage()
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/TCPickerView+Mode.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TCPickerView+Mode.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 10/7/20.
6 | //
7 |
8 | import Foundation
9 |
10 | public extension TCPickerView {
11 | enum Mode {
12 | case none
13 | case single
14 | case multiply
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/TCPickerView+Theme.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TCPickerView+Theme.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 10/7/20.
6 | //
7 |
8 | import Foundation
9 |
10 | extension TCPickerView {
11 | func change(_ theme: TCPickerViewThemeType) {
12 | titleLabel.textColor = theme.titleColor
13 | titleLabel.backgroundColor = theme.headerBackgroundColor
14 | titleLabel.font = theme.titleFont
15 | containerView.layer.cornerRadius = theme.cornerRadius
16 | containerView.backgroundColor = theme.backgroundColor
17 | tableView.rowHeight = theme.rowHeight
18 | tableView.backgroundColor = theme.backgroundColor
19 | doneButton.setTitleColor(theme.doneTextColor, for: .normal)
20 | doneButton.backgroundColor = theme.doneBackgroundColor
21 | doneButton.setTitle(theme.doneText, for: .normal)
22 | doneButton.titleLabel?.font = theme.buttonsFont
23 | closeButton.setTitleColor(theme.closeTextColor, for: .normal)
24 | closeButton.backgroundColor = theme.closeBackgroundColor
25 | closeButton.setTitle(theme.closeText, for: .normal)
26 | closeButton.titleLabel?.font = theme.buttonsFont
27 | headerSeparator.backgroundColor = theme.separatorColor
28 | headerView.constraint(withIdentifier: .height)?.constant = theme.headerHeight
29 | searchBar.textField?.textColor = theme.searchColor
30 | searchBar.textField?.leftView?.tintColor = theme.searchColor
31 | searchBar.tintColor = theme.searchColor
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/TCPickerView+Value.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TCPickerView+Value.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 10/7/20.
6 | //
7 |
8 | import Foundation
9 |
10 | public extension TCPickerView {
11 | struct Value {
12 | public let title: String
13 | public var isChecked: Bool
14 |
15 | public init(title: String, isChecked: Bool = false) {
16 | self.title = title
17 | self.isChecked = isChecked
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/TCPickerView/Source/Classes/TCPickerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TCPickerView.swift
3 | // TCPickerView
4 | //
5 | // Created by Taras Chernyshenko on 9/4/17.
6 | // Copyright © 2017 Taras Chernyshenko. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | public protocol TCPickerViewOutput: class {
12 | func pickerView(_ pickerView: TCPickerViewInput, didSelectRowAtIndex index: Int)
13 | func pickerView(_ pickerView: TCPickerViewInput,
14 | cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)?
15 | }
16 |
17 | public extension TCPickerViewOutput {
18 | func pickerView(_ pickerView: TCPickerViewInput,
19 | cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)? {
20 | return nil
21 | }
22 | }
23 |
24 | public protocol TCPickerViewInput {
25 | var values: [TCPickerView.Value] { set get }
26 | var selection: TCPickerView.Mode { set get } // none / single / multiply
27 | var isSearchEnabled: Bool { set get }
28 | var completion: TCPickerView.Completion? { set get } // use it to get result after user press Done
29 | var closeAction: TCPickerView.CloseAction? { set get }
30 | var searchResult: TCPickerView.SearchResult? { set get }
31 | var delegate: TCPickerViewOutput? { set get }
32 |
33 | var title: String { set get }
34 | var theme: TCPickerViewThemeType { set get }
35 |
36 | init(size: CGSize?) // desing your own picker size
37 | func show()
38 | func register(_ nib: UINib?, forCellReuseIdentifier identifier: String)
39 | func dequeue(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell & TCPickerCellType
40 | }
41 |
42 | open class TCPickerView: UIView, UITableViewDataSource, UITableViewDelegate, TCPickerViewInput {
43 |
44 | private struct Consts {
45 | static let buttonsHeight: CGFloat = 50.0
46 | static let tableViewCellIdentifier = "TableViewCell"
47 | }
48 |
49 | public typealias Completion = ([Int]) -> Void
50 | public typealias CloseAction = () -> ()
51 | public typealias SearchResult = (String) -> ()
52 |
53 | private(set) lazy var containerView: UIView = {
54 | let view = UIView(frame: .zero)
55 | view.backgroundColor = UIColor.white
56 | view.clipsToBounds = true
57 | return view
58 | }()
59 |
60 | private(set) lazy var titleLabel: UILabel = {
61 | let label = UILabel(frame: .zero)
62 | label.text = "Select"
63 | label.textAlignment = .center
64 | label.text = title
65 | return label
66 | }()
67 |
68 | private(set) lazy var tableView: UITableView = {
69 | let tableView = UITableView(frame: .zero, style: .plain)
70 | tableView.register(
71 | TCPickerTableViewCell.self,
72 | forCellReuseIdentifier: Consts.tableViewCellIdentifier
73 | )
74 | tableView.tableFooterView = UIView()
75 | tableView.dataSource = self
76 | tableView.delegate = self
77 | tableView.separatorInset = UIEdgeInsets(
78 | top: 0, left: 0, bottom: 0, right: 0)
79 | tableView.separatorStyle = .none
80 | tableView.tintColor = .clear
81 | return tableView
82 | }()
83 |
84 | private(set) lazy var doneButton: UIButton = {
85 | let button = UIButton(frame: .zero)
86 | button.addTarget(self, action: #selector(TCPickerView.done), for: .touchUpInside)
87 | button.setTitle("Done", for: .normal)
88 | button.titleLabel?.textAlignment = .center
89 | return button
90 | }()
91 |
92 | private(set) lazy var closeButton: UIButton = {
93 | let button = UIButton(frame: .zero)
94 | button.addTarget(self, action: #selector(TCPickerView.close), for: .touchUpInside)
95 | button.setTitle("Close", for: .normal)
96 | button.titleLabel?.textAlignment = .center
97 | return button
98 | }()
99 |
100 | private(set) lazy var headerSeparator: UIView = {
101 | let view = UIView(frame: .zero)
102 | view.translatesAutoresizingMaskIntoConstraints = false
103 | view.heightAnchor.constraint(equalToConstant: 0.5).isActive = true
104 | return view
105 | }()
106 |
107 | private(set) lazy var searchBar: UISearchBar = {
108 | let searchBar = UISearchBar(frame: .zero)
109 | searchBar.delegate = self
110 | searchBar.backgroundImage = .init()
111 | searchBar.backgroundColor = .clear
112 | searchBar.tintColor = theme.searchColor
113 | searchBar.textField?.textColor = theme.searchColor
114 | searchBar.textField?.leftView?.tintColor = theme.searchColor
115 | return searchBar
116 | }()
117 |
118 | private lazy var containerStackView: UIStackView = {
119 | let stackView = UIStackView(arrangedSubviews: [
120 | headerView,
121 | searchBar,
122 | headerSeparator,
123 | tableView,
124 | footerView
125 | ])
126 | stackView.axis = .vertical
127 | stackView.backgroundColor = .clear
128 | return stackView
129 | }()
130 |
131 | private(set) lazy var headerView: UIView = {
132 | let header = UIView(frame: .zero)
133 | let stackView = UIStackView(arrangedSubviews: [titleLabel])
134 | stackView.axis = .vertical
135 | header.addSubviewWithConstraints(stackView)
136 |
137 | return header
138 | }()
139 |
140 | private(set) lazy var footerView: UIView = {
141 | let footer = UIView(frame: .zero)
142 | let stackView = UIStackView(arrangedSubviews: [doneButton, closeButton])
143 | stackView.distribution = .fillEqually
144 | stackView.axis = .horizontal
145 | footer.addSubviewWithConstraints(stackView)
146 |
147 | return footer
148 | }()
149 |
150 | public var values: [Value] = [] {
151 | didSet {
152 | tableView.reloadData()
153 | }
154 | }
155 |
156 | public var title: String = "Select" {
157 | didSet {
158 | titleLabel.text = self.title
159 | }
160 | }
161 | public var isSearchEnabled: Bool = false {
162 | didSet {
163 | searchBar.isHidden = !isSearchEnabled
164 | }
165 | }
166 | public weak var delegate: TCPickerViewOutput?
167 | public var closeAction: CloseAction?
168 | public var completion: Completion?
169 | public var searchResult: SearchResult?
170 | public var selection: Mode = .multiply
171 | public var theme: TCPickerViewThemeType = TCPickerViewDefaultTheme() {
172 | didSet {
173 | change(theme)
174 | }
175 | }
176 |
177 | convenience init() {
178 | self.init(size: nil)
179 | }
180 |
181 | public required init(size: CGSize? = nil) {
182 | let screenWidth: CGFloat = UIScreen.main.bounds.width
183 | let screenHeight: CGFloat = UIScreen.main.bounds.height
184 | let frame: CGRect = CGRect(x: 0, y: 0, width: screenWidth,
185 | height: screenHeight)
186 |
187 | let width: CGFloat = screenWidth - 84
188 | let height: CGFloat = 400
189 | var containerFrame: CGRect = CGRect(x: 0, y: 0, width: width, height: height)
190 | if let size = size {
191 | containerFrame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
192 | }
193 | super.init(frame: frame)
194 | containerView.frame = containerFrame
195 | setupUI()
196 | }
197 |
198 | override public init(frame: CGRect) {
199 | super.init(frame: frame)
200 | containerView.frame = frame
201 | setupUI()
202 | }
203 |
204 | required public init?(coder aDecoder: NSCoder) {
205 | super.init(coder: aDecoder)
206 | setupUI()
207 | }
208 |
209 | open func show() {
210 | guard let appDelegate = UIApplication.shared.delegate else {
211 | assertionFailure()
212 | return
213 | }
214 | guard let window = appDelegate.window else {
215 | assertionFailure()
216 | return
217 | }
218 |
219 | window?.addSubview(self)
220 | window?.bringSubviewToFront(self)
221 | window?.endEditing(true)
222 | UIView.animate(withDuration: 0.3, delay: 0.0,
223 | usingSpringWithDamping: 0.7, initialSpringVelocity: 3.0,
224 | options: .allowAnimatedContent, animations: {
225 | self.containerView.center = self.center
226 | self.tableView.reloadData()
227 | }) { (isFinished) in
228 | self.layoutIfNeeded()
229 | }
230 | }
231 |
232 | open func register(_ nib: UINib?, forCellReuseIdentifier identifier: String) {
233 | tableView.register(nib, forCellReuseIdentifier: identifier)
234 | }
235 |
236 | open func registerCell(_ cellClass: Swift.AnyClass?, forCellReuseIdentifier identifier: String) {
237 | tableView.register(cellClass, forCellReuseIdentifier: identifier)
238 | }
239 |
240 | open func dequeue(withIdentifier identifier: String,
241 | for indexPath: IndexPath) -> UITableViewCell & TCPickerCellType {
242 | return tableView.dequeueReusableCell(
243 | withIdentifier: identifier,
244 | for: indexPath
245 | ) as! UITableViewCell & TCPickerCellType
246 | }
247 |
248 | @objc private func done() {
249 | var indexes: [Int] = []
250 | for i in 0.. Int {
277 | return self.values.count
278 | }
279 |
280 | public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
281 | let value = self.values[indexPath.row]
282 | var cell: UITableViewCell & TCPickerCellType = tableView.dequeueReusableCell(
283 | withIdentifier: Consts.tableViewCellIdentifier,
284 | for: indexPath
285 | ) as! TCPickerTableViewCell
286 | if let customCell = self.delegate?.pickerView(self, cellForRowAt: indexPath) {
287 | cell = customCell
288 | }
289 | cell.viewModel = TCPickerModel(
290 | title: value.title,
291 | isChecked: value.isChecked
292 | )
293 | return cell
294 | }
295 |
296 | //MARK: UITableViewDelegate methods
297 |
298 | public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
299 | var values = self.values
300 | switch self.selection {
301 | case .none: return
302 | case .single:
303 | for i in 0..