diff --git a/LeadKit.podspec b/LeadKit.podspec index 679710cf..9261bbce 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -26,6 +26,7 @@ Pod::Spec.new do |s| "Sources/Extensions/NetworkService/NetworkService+ActivityIndicator.swift", ] ss.watchos.exclude_files = [ + "Sources/Classes/Controllers/**/*", "Sources/Classes/Views/SeparatorRowBox/*", "Sources/Classes/Views/SeparatorCell/*", "Sources/Classes/Views/EmptyCell/*", @@ -46,6 +47,7 @@ Pod::Spec.new do |s| "Sources/Extensions/UIKit/**/*.swift", "Sources/Extensions/Views/ViewBackground+Configuration.swift", "Sources/Extensions/Views/SeparatorCell/*", + "Sources/Protocols/UIKit/**/*.swift", "Sources/Protocols/LoadingIndicator.swift", "Sources/Protocols/DataLoading/PaginationDataLoading/PaginationWrappable.swift", "Sources/Protocols/DataLoading/GeneralDataLoading/GeneralDataLoadingController.swift", diff --git a/LeadKit.xcodeproj/project.pbxproj b/LeadKit.xcodeproj/project.pbxproj index a3065307..f312b50e 100644 --- a/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit.xcodeproj/project.pbxproj @@ -364,6 +364,36 @@ 6741C41020EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741C40E20EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift */; }; 6741C41120EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741C40E20EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift */; }; 6741C41220EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741C40E20EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift */; }; + 6741CEA120E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */; }; + 6741CEA220E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */; }; + 6741CEA320E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */; }; + 6741CEA520E2418200FEC4D9 /* TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */; }; + 6741CEA620E2418200FEC4D9 /* TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */; }; + 6741CEA720E2418200FEC4D9 /* TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */; }; + 6741CEA920E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */; }; + 6741CEAA20E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */; }; + 6741CEAB20E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */; }; + 6741CEAF20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */; }; + 6741CEB020E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */; }; + 6741CEB120E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */; }; + 6741CEB420E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */; }; + 6741CEB520E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */; }; + 6741CEB620E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */; }; + 6741CEBA20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */; }; + 6741CEBB20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */; }; + 6741CEBC20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */; }; + 6741CEBE20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */; }; + 6741CEBF20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */; }; + 6741CEC020E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */; }; + 6741CEC220E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */; }; + 6741CEC320E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */; }; + 6741CEC420E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */; }; + 6741CECE20E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */; }; + 6741CECF20E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */; }; + 6741CED020E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */; }; + 6741CED120E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */; }; + 6741CED220E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */; }; + 6741CED320E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */; }; 674AF55C1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674AF55B1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift */; }; 674AF55D1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674AF55B1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift */; }; 674AF55E1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 674AF55B1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift */; }; @@ -747,6 +777,16 @@ 673CF4332063E29B00C329F6 /* TextWithButtonPlaceholder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextWithButtonPlaceholder.swift; sourceTree = ""; }; 673CF4372063E7CE00C329F6 /* GeneralDataLoadingController+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GeneralDataLoadingController+DefaultImplementation.swift"; sourceTree = ""; }; 6741C40E20EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GeneralDataLoadingViewModel+Extensions.swift"; sourceTree = ""; }; + 6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollViewHolder.swift; sourceTree = ""; }; + 6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewHolder.swift; sourceTree = ""; }; + 6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewHolder.swift; sourceTree = ""; }; + 6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TableViewHolder+ScrollViewHolder.swift"; sourceTree = ""; }; + 6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CollectionViewHolder+ScrollViewHolder.swift"; sourceTree = ""; }; + 6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+ScrollViewHolder.swift"; sourceTree = ""; }; + 6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+RxBindings.swift"; sourceTree = ""; }; + 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+TableViewHolder.swift"; sourceTree = ""; }; + 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseCustomViewController.swift; sourceTree = ""; }; + 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseConfigurableController.swift; sourceTree = ""; }; 674AF55B1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIActivityIndicatorView+LoadingIndicator.swift"; sourceTree = ""; }; 6762131720A0BBA30034EEF1 /* TableSection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TableSection+Extensions.swift"; sourceTree = ""; }; 676B22A1206A626D002E9F8A /* NSAttributedString+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAttributedString+Extensions.swift"; sourceTree = ""; }; @@ -912,6 +952,7 @@ isa = PBXGroup; children = ( 36DAAF502007CC920090BE0D /* UITableView+Extensions.swift */, + 6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */, ); path = UITableView; sourceTree = ""; @@ -919,6 +960,7 @@ 671461C41EB3396E00EAB194 /* Classes */ = { isa = PBXGroup; children = ( + 6741CEC520E2434900FEC4D9 /* Controllers */, 6774527E2062566D0024EEEF /* DataLoading */, 671461D21EB3396E00EAB194 /* Services */, 671461D41EB3396E00EAB194 /* Views */, @@ -1187,11 +1229,12 @@ 671462221EB3396E00EAB194 /* Protocols */ = { isa = PBXGroup; children = ( + 6741CEAC20E241A000FEC4D9 /* Controllers */, + 6741CE9F20E2413300FEC4D9 /* UIKit */, 679C77D41F98F78E0094BE10 /* AlertRepresentable.swift */, 671463A11EB33FF600EAB194 /* Animatable.swift */, 40F118461F8FEF97004AADAF /* AppearanceConfigurable.swift */, 671462231EB3396E00EAB194 /* BaseViewModel.swift */, - 671462241EB3396E00EAB194 /* ConfigurableController.swift */, 671462331EB3396E00EAB194 /* ConfigurableView.swift */, 67EB7FC5206148C400BDD9FB /* DataLoading */, 67274783206CD7E500725163 /* DateFormatingService */, @@ -1384,11 +1427,14 @@ 672947E0206EA36B00AC6B6B /* UIKit */ = { isa = PBXGroup; children = ( + 6741CEB220E242B600FEC4D9 /* CollectionViewHolder */, + 6741CEAD20E2428A00FEC4D9 /* TableViewHolder */, 674AF55A1EC45B1600038A8F /* UIActivityIndicatorView */, 679C77D51F98F7A60094BE10 /* UIAlertController */, 671AD260206A35C500EAF887 /* UIApplication */, 672947E4206EA67B00AC6B6B /* UIImage */, 67274776206CD07B00725163 /* UILabel */, + 6741CEB820E242CF00FEC4D9 /* UIScrollView */, 36DAAF4F2007CC330090BE0D /* UITableView */, 671462111EB3396E00EAB194 /* UIView */, 671462171EB3396E00EAB194 /* UIViewController */, @@ -1467,6 +1513,58 @@ path = GeneralDataLoading; sourceTree = ""; }; + 6741CE9F20E2413300FEC4D9 /* UIKit */ = { + isa = PBXGroup; + children = ( + 6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */, + 6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */, + 6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */, + ); + path = UIKit; + sourceTree = ""; + }; + 6741CEAC20E241A000FEC4D9 /* Controllers */ = { + isa = PBXGroup; + children = ( + 671462241EB3396E00EAB194 /* ConfigurableController.swift */, + ); + path = Controllers; + sourceTree = ""; + }; + 6741CEAD20E2428A00FEC4D9 /* TableViewHolder */ = { + isa = PBXGroup; + children = ( + 6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */, + ); + path = TableViewHolder; + sourceTree = ""; + }; + 6741CEB220E242B600FEC4D9 /* CollectionViewHolder */ = { + isa = PBXGroup; + children = ( + 6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */, + ); + path = CollectionViewHolder; + sourceTree = ""; + }; + 6741CEB820E242CF00FEC4D9 /* UIScrollView */ = { + isa = PBXGroup; + children = ( + 6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */, + 6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */, + ); + path = UIScrollView; + sourceTree = ""; + }; + 6741CEC520E2434900FEC4D9 /* Controllers */ = { + isa = PBXGroup; + children = ( + 6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */, + 6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */, + ); + path = Controllers; + sourceTree = ""; + }; 674AF55A1EC45B1600038A8F /* UIActivityIndicatorView */ = { isa = PBXGroup; children = ( @@ -2529,6 +2627,7 @@ 6774529A20625E5B0024EEEF /* PaginationDataLoadingState.swift in Sources */, 825F8F2820B3384C00594857 /* PaginationWrapperUIDelegate.swift in Sources */, 678D26A020692BFF00B05B93 /* TextFieldViewEvents.swift in Sources */, + 6741CED120E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */, 6727478F206CD88600725163 /* DateFormattingService.swift in Sources */, 678D26A420692BFF00B05B93 /* TextFieldViewModelEvents.swift in Sources */, 671462801EB3396E00EAB194 /* DataRequest+Extensions.swift in Sources */, @@ -2543,6 +2642,7 @@ 6714639E1EB33AEB00EAB194 /* NetworkService+ActivityIndicator-UIApplication.swift in Sources */, 6714634C1EB3396E00EAB194 /* ReuseIdentifierProtocol.swift in Sources */, 671462F01EB3396E00EAB194 /* UIImage+SupportExtensions.swift in Sources */, + 6741CEAF20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */, 67CAF8C620652E2A00527085 /* TextFieldViewModel.swift in Sources */, 671462681EB3396E00EAB194 /* NetworkService.swift in Sources */, 671463101EB3396E00EAB194 /* UIViewController+DefaultXibName.swift in Sources */, @@ -2562,6 +2662,7 @@ 67EB7FCF20615B8900BDD9FB /* TotalCountCursorConfiguration.swift in Sources */, 671462981EB3396E00EAB194 /* CGSize+Resize.swift in Sources */, 67051ADB1EBC7C36008EADC0 /* SpinnerView.swift in Sources */, + 6741CEBA20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */, 67A1FF941EBCA65E00D6C89F /* CABasicAnimation+Rotation.swift in Sources */, 82F8BB181F5DDED100C1061B /* Single+DeferredJust.swift in Sources */, 671463301EB3396E00EAB194 /* CursorType.swift in Sources */, @@ -2580,11 +2681,14 @@ 67153E40207DFBA80049D8C0 /* FloatingPoint+DegreesRadiansConvertion.swift in Sources */, 671462AC1EB3396E00EAB194 /* Observable+DeferredJust.swift in Sources */, 671463001EB3396E00EAB194 /* UIView+LoadFromNib.swift in Sources */, + 6741CEB420E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */, A676AE501F9810C1001F9214 /* Any+Cast.swift in Sources */, 6714627C1EB3396E00EAB194 /* SessionManager+Extensions.swift in Sources */, 671462D41EB3396E00EAB194 /* TableDirector+Extensions.swift in Sources */, + 6741CEBE20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */, 671462781EB3396E00EAB194 /* ResizeMode.swift in Sources */, A676AE551F98112E001F9214 /* ObservableMappable.swift in Sources */, + 6741CEA520E2418200FEC4D9 /* TableViewHolder.swift in Sources */, A6E0DDE11F8A696F002CA74E /* SeparatorRowBox.swift in Sources */, A6E0DDDE1F8A696F002CA74E /* EmptyCellRow.swift in Sources */, 6762131820A0BBA30034EEF1 /* TableSection+Extensions.swift in Sources */, @@ -2602,6 +2706,7 @@ 671462EC1EB3396E00EAB194 /* UIImage+Extensions.swift in Sources */, 6713C24120AF189100875921 /* RxNetworkOperationModel.swift in Sources */, 677452AE206274630024EEEF /* PaginationWrapper.swift in Sources */, + 6741CEC220E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */, A6E0DDF11F8A6C80002CA74E /* SeparatorConfiguration.swift in Sources */, 6727477F206CD3BD00725163 /* ViewText+Extensions.swift in Sources */, 67EB7FEB2061667900BDD9FB /* DefaultTotalCountCursorListingResult.swift in Sources */, @@ -2624,6 +2729,7 @@ 6714637C1EB3396E00EAB194 /* ImageDrawingOperation.swift in Sources */, 671463341EB3396E00EAB194 /* DrawingOperation.swift in Sources */, 673CF4182063D50700C329F6 /* GeneralDataLoadingController.swift in Sources */, + 6741CECE20E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */, 671462701EB3396E00EAB194 /* CursorError.swift in Sources */, EF24213A2076D5BD00FA9BE6 /* NetworkServiceConfiguration.swift in Sources */, 671463981EB3396E00EAB194 /* AnyLoadingIndicator.swift in Sources */, @@ -2635,6 +2741,7 @@ A6F32C081F6EBDAA00AC08EE /* String+LocalizedComponent.swift in Sources */, 671462881EB3396E00EAB194 /* CGFloat+Pixels.swift in Sources */, 671462941EB3396E00EAB194 /* CGSize+CGContextSize.swift in Sources */, + 6741CEA920E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */, 67745279206252020024EEEF /* DataLoadingState.swift in Sources */, 671463641EB3396E00EAB194 /* ViewHeightProtocol.swift in Sources */, 67EB7FDA20615D5B00BDD9FB /* ResettableRxCursorDataSource.swift in Sources */, @@ -2670,6 +2777,7 @@ 67955D52206D216B0021ECD2 /* Singleton.swift in Sources */, 67EB7FE420615DE000BDD9FB /* DataSource.swift in Sources */, 67EB7FD420615D1700BDD9FB /* ResettableCursorType.swift in Sources */, + 6741CEA120E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */, 6714629C1EB3396E00EAB194 /* CursorType+Slice.swift in Sources */, 6774529F20625EEE0024EEEF /* PaginationDataLoadingModel.swift in Sources */, 678D267920691D8200B05B93 /* DataModelFieldBinding.swift in Sources */, @@ -2842,6 +2950,7 @@ 671463871EB3396E00EAB194 /* ResizeDrawingOperation.swift in Sources */, 671463931EB3396E00EAB194 /* TemplateDrawingOperation.swift in Sources */, 674AF55E1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift in Sources */, + 6741CEC020E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */, 671463A51EB33FF600EAB194 /* Animatable.swift in Sources */, 67CAF8C920652E2A00527085 /* TextFieldViewModel.swift in Sources */, 6714629B1EB3396E00EAB194 /* CGSize+Resize.swift in Sources */, @@ -2866,8 +2975,10 @@ 677452A220625EEE0024EEEF /* PaginationDataLoadingModel.swift in Sources */, 673CF4362063E29B00C329F6 /* TextWithButtonPlaceholder.swift in Sources */, A6F32C0C1F6EBE5C00AC08EE /* String+LocalizedComponent.swift in Sources */, + 6741CEB620E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */, 671462AF1EB3396E00EAB194 /* Observable+DeferredJust.swift in Sources */, A676AE4F1F9810C1001F9214 /* Any+Cast.swift in Sources */, + 6741CEC420E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */, 671463031EB3396E00EAB194 /* UIView+LoadFromNib.swift in Sources */, 6714627F1EB3396E00EAB194 /* SessionManager+Extensions.swift in Sources */, 6737CFA5207220960063E056 /* SeparatorConfiguration+Extensions.swift in Sources */, @@ -2900,13 +3011,18 @@ 67EB7FD720615D1700BDD9FB /* ResettableCursorType.swift in Sources */, 671463371EB3396E00EAB194 /* DrawingOperation.swift in Sources */, 67153E3D207DFADA0049D8C0 /* RotateDrawingOperation.swift in Sources */, + 6741CED320E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */, 67274782206CD3BD00725163 /* ViewText+Extensions.swift in Sources */, 673CF42E2063DE5900C329F6 /* TextPlaceholderView.swift in Sources */, + 6741CEB120E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */, + 6741CEA320E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */, B84CB06B20B702260090DB91 /* Encodable+Extensions.swift in Sources */, 671462731EB3396E00EAB194 /* CursorError.swift in Sources */, + 6741CED020E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */, 6727478D206CD83600725163 /* DateFormat.swift in Sources */, 67EB7FDD20615D5B00BDD9FB /* ResettableRxCursorDataSource.swift in Sources */, 677452A720625FA90024EEEF /* RxDataSource.swift in Sources */, + 6741CEBC20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */, 6774527720624E820024EEEF /* DataLoadingModel.swift in Sources */, 67926239206EB0AE00308E62 /* CellSeparatorType.swift in Sources */, 678D267C20691D8200B05B93 /* DataModelFieldBinding.swift in Sources */, @@ -2920,6 +3036,7 @@ 67A1FF911EBCA09B00D6C89F /* UIImage+Spinner.swift in Sources */, 6714624B1EB3396E00EAB194 /* FixedPageCursor.swift in Sources */, 671462CB1EB3396E00EAB194 /* String+Localization.swift in Sources */, + 6741CEAB20E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */, 36977763200CF12100ED9C6E /* UITableView+Extensions.swift in Sources */, 671462BB1EB3396E00EAB194 /* Sequence+ConcurrentMap.swift in Sources */, 67EB7FEE2061667900BDD9FB /* DefaultTotalCountCursorListingResult.swift in Sources */, @@ -2929,6 +3046,7 @@ 6714631B1EB3396E00EAB194 /* UIWindow+Extensions.swift in Sources */, 673CF4252063D90600C329F6 /* DisposeBagHolder.swift in Sources */, 6714637B1EB3396E00EAB194 /* CALayerDrawingOperation.swift in Sources */, + 6741CEA720E2418200FEC4D9 /* TableViewHolder.swift in Sources */, 6774529520625D170024EEEF /* GeneralDataLoadingModel.swift in Sources */, 6713C23A20AF0C4D00875921 /* NetworkOperationState.swift in Sources */, 6774529D20625E5B0024EEEF /* PaginationDataLoadingState.swift in Sources */, @@ -3015,7 +3133,9 @@ 671462D11EB3396E00EAB194 /* UIScrollView+Support.swift in Sources */, 671AD25D206A343300EAF887 /* VoidBlock.swift in Sources */, 671AD26D206A3E8500EAF887 /* Array+TotalCountCursorListingResult.swift in Sources */, + 6741CEB520E242C100FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift in Sources */, 6774528E20625C9E0024EEEF /* GeneralDataLoadingState.swift in Sources */, + 6741CEB020E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift in Sources */, 671463911EB3396E00EAB194 /* TemplateDrawingOperation.swift in Sources */, 67EB7FEC2061667900BDD9FB /* DefaultTotalCountCursorListingResult.swift in Sources */, 671462991EB3396E00EAB194 /* CGSize+Resize.swift in Sources */, @@ -3025,8 +3145,10 @@ 6714624D1EB3396E00EAB194 /* MapCursor.swift in Sources */, 3622F5DF20E2541B009DED94 /* TableRow+AppearanceExtension.swift in Sources */, 67EB7FD520615D1700BDD9FB /* ResettableCursorType.swift in Sources */, + 6741CEA220E2416C00FEC4D9 /* ScrollViewHolder.swift in Sources */, 671463251EB3396E00EAB194 /* Any+TypeName.swift in Sources */, 671463891EB3396E00EAB194 /* RoundDrawingOperation.swift in Sources */, + 6741CEBB20E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift in Sources */, B84CB06920B702240090DB91 /* Encodable+Extensions.swift in Sources */, 675C1FB61F97CA33007D5249 /* AppearanceConfigurable.swift in Sources */, 67FD4383206BD24B005B0C64 /* EqutableOptionalArray.swift in Sources */, @@ -3042,6 +3164,7 @@ 673CF4352063E29B00C329F6 /* TextWithButtonPlaceholder.swift in Sources */, 6727476F206CCDDB00725163 /* ViewBackground+Configuration.swift in Sources */, 673CF4232063D90600C329F6 /* DisposeBagHolder.swift in Sources */, + 6741CEBF20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift in Sources */, 677452AA206263360024EEEF /* CursorType+RxDataSourceDefaultImplementation.swift in Sources */, 671462791EB3396E00EAB194 /* ResizeMode.swift in Sources */, 671463051EB3396E00EAB194 /* UIView+LoadingIndicator.swift in Sources */, @@ -3058,10 +3181,13 @@ 6714626D1EB3396E00EAB194 /* XibView.swift in Sources */, 6714637D1EB3396E00EAB194 /* ImageDrawingOperation.swift in Sources */, 671463351EB3396E00EAB194 /* DrawingOperation.swift in Sources */, + 6741CED220E243F800FEC4D9 /* BaseConfigurableController.swift in Sources */, 677452A020625EEE0024EEEF /* PaginationDataLoadingModel.swift in Sources */, 3622F5E220E25883009DED94 /* SeparatorRowBox.swift in Sources */, + 6741CEA620E2418200FEC4D9 /* TableViewHolder.swift in Sources */, 67FDC2601FA310EA00C76A77 /* RequestError.swift in Sources */, 6774529320625D170024EEEF /* GeneralDataLoadingModel.swift in Sources */, + 6741CEC320E2430A00FEC4D9 /* UITableView+TableViewHolder.swift in Sources */, 671462711EB3396E00EAB194 /* CursorError.swift in Sources */, 671463991EB3396E00EAB194 /* AnyLoadingIndicator.swift in Sources */, 673CF4392063E7CE00C329F6 /* GeneralDataLoadingController+DefaultImplementation.swift in Sources */, @@ -3094,6 +3220,7 @@ EFBE57DC1EC361620040E00A /* UIView+Layout.swift in Sources */, 67A1FF901EBCA09B00D6C89F /* UIImage+Spinner.swift in Sources */, 6774529B20625E5B0024EEEF /* PaginationDataLoadingState.swift in Sources */, + 6741CEAA20E2418B00FEC4D9 /* CollectionViewHolder.swift in Sources */, 671463791EB3396E00EAB194 /* CALayerDrawingOperation.swift in Sources */, 6727476A206CCCA300725163 /* ViewBackground.swift in Sources */, 3622F5DC20E253D8009DED94 /* TableSection+Extensions.swift in Sources */, @@ -3118,6 +3245,7 @@ 678D26A120692BFF00B05B93 /* TextFieldViewEvents.swift in Sources */, 671462511EB3396E00EAB194 /* StaticCursor.swift in Sources */, 6714629D1EB3396E00EAB194 /* CursorType+Slice.swift in Sources */, + 6741CECF20E243F800FEC4D9 /* BaseCustomViewController.swift in Sources */, 671463691EB3396E00EAB194 /* ConfigurableView.swift in Sources */, 67EB7FD020615B8900BDD9FB /* TotalCountCursorConfiguration.swift in Sources */, 67CAF8AC2065189C00527085 /* NetworkService+ActivityIndicator.swift in Sources */, diff --git a/Sources/Classes/Controllers/BaseConfigurableController.swift b/Sources/Classes/Controllers/BaseConfigurableController.swift new file mode 100644 index 00000000..40934789 --- /dev/null +++ b/Sources/Classes/Controllers/BaseConfigurableController.swift @@ -0,0 +1,62 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIViewController + +/// Base controller that can should be configured with view model. +open class BaseConfigurableController: UIViewController, ConfigurableController { + + public let viewModel: ViewModel + + public init(viewModel: ViewModel) { + self.viewModel = viewModel + + super.init(nibName: nil, bundle: nil) + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - ConfigurableController + + open func addViews() { + // override in subclass + } + + open func bindViews() { + // override in subclass + } + + open func configureAppearance() { + // override in subclass + } + + open func localize() { + // override in subclass + } + + open func configureBarButtons() { + // override in subclass + } + +} diff --git a/Sources/Classes/Controllers/BaseCustomViewController.swift b/Sources/Classes/Controllers/BaseCustomViewController.swift new file mode 100644 index 00000000..aea7e746 --- /dev/null +++ b/Sources/Classes/Controllers/BaseCustomViewController.swift @@ -0,0 +1,45 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIView + +/// Base controller configurable by view model and custom view. +open class BaseCustomViewController: BaseConfigurableController { + + /// Contained custom view. + public let customView: View + + public init(viewModel: ViewModel, customView: View) { + self.customView = customView + + super.init(viewModel: viewModel) + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override open func loadView() { + self.view = customView + } + +} diff --git a/Sources/Extensions/DataLoading/PaginationDataLoading/UICollectionView+PaginationWrappable.swift b/Sources/Extensions/DataLoading/PaginationDataLoading/UICollectionView+PaginationWrappable.swift index 732b7abf..1fde305e 100644 --- a/Sources/Extensions/DataLoading/PaginationDataLoading/UICollectionView+PaginationWrappable.swift +++ b/Sources/Extensions/DataLoading/PaginationDataLoading/UICollectionView+PaginationWrappable.swift @@ -24,10 +24,6 @@ import UIKit.UICollectionView extension UICollectionView: PaginationWrappable { - public var scrollView: UIScrollView { - return self - } - public var footerView: UIView? { get { return nil diff --git a/Sources/Extensions/DataLoading/PaginationDataLoading/UITableView+PaginationWrappable.swift b/Sources/Extensions/DataLoading/PaginationDataLoading/UITableView+PaginationWrappable.swift index 0915e3c5..8383a3dd 100644 --- a/Sources/Extensions/DataLoading/PaginationDataLoading/UITableView+PaginationWrappable.swift +++ b/Sources/Extensions/DataLoading/PaginationDataLoading/UITableView+PaginationWrappable.swift @@ -24,10 +24,6 @@ import UIKit.UITableView extension UITableView: PaginationWrappable { - public var scrollView: UIScrollView { - return self - } - public var footerView: UIView? { get { return tableFooterView diff --git a/Sources/Extensions/UIKit/CollectionViewHolder/CollectionViewHolder+ScrollViewHolder.swift b/Sources/Extensions/UIKit/CollectionViewHolder/CollectionViewHolder+ScrollViewHolder.swift new file mode 100644 index 00000000..8c285696 --- /dev/null +++ b/Sources/Extensions/UIKit/CollectionViewHolder/CollectionViewHolder+ScrollViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIScrollView + +public extension ScrollViewHolder where Self: CollectionViewHolder { + + var scrollView: UIScrollView { + return collectionView + } + +} diff --git a/Sources/Extensions/UIKit/TableViewHolder/TableViewHolder+ScrollViewHolder.swift b/Sources/Extensions/UIKit/TableViewHolder/TableViewHolder+ScrollViewHolder.swift new file mode 100644 index 00000000..9b3815de --- /dev/null +++ b/Sources/Extensions/UIKit/TableViewHolder/TableViewHolder+ScrollViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIScrollView + +public extension ScrollViewHolder where Self: TableViewHolder { + + var scrollView: UIScrollView { + return tableView + } + +} diff --git a/Sources/Extensions/UIKit/UIScrollView/UIScrollView+RxBindings.swift b/Sources/Extensions/UIKit/UIScrollView/UIScrollView+RxBindings.swift new file mode 100644 index 00000000..5382e291 --- /dev/null +++ b/Sources/Extensions/UIKit/UIScrollView/UIScrollView+RxBindings.swift @@ -0,0 +1,38 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import RxSwift +import RxCocoa + +public extension Reactive where Base: UIScrollView { + + /// Binder instance that updates contentInset bottom value. + var bottomInsetBinder: Binder { + return Binder(base) { base, value in + DispatchQueue.main.async { + base.contentInset.bottom = value + base.scrollIndicatorInsets.bottom = value + } + } + } + +} diff --git a/Sources/Extensions/UIKit/UIScrollView/UIScrollView+ScrollViewHolder.swift b/Sources/Extensions/UIKit/UIScrollView/UIScrollView+ScrollViewHolder.swift new file mode 100644 index 00000000..c03059a8 --- /dev/null +++ b/Sources/Extensions/UIKit/UIScrollView/UIScrollView+ScrollViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIScrollView + +extension UIScrollView: ScrollViewHolder { + + public var scrollView: UIScrollView { + return self + } + +} diff --git a/Sources/Extensions/UIKit/UITableView/UITableView+TableViewHolder.swift b/Sources/Extensions/UIKit/UITableView/UITableView+TableViewHolder.swift new file mode 100644 index 00000000..1740660d --- /dev/null +++ b/Sources/Extensions/UIKit/UITableView/UITableView+TableViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UITableView + +extension UITableView: TableViewHolder { + + public var tableView: UITableView { + return self + } + +} diff --git a/Sources/Extensions/UIKit/UIViewController/UIViewController+ConfigurableController.swift b/Sources/Extensions/UIKit/UIViewController/UIViewController+ConfigurableController.swift index 904f38e9..20088759 100644 --- a/Sources/Extensions/UIKit/UIViewController/UIViewController+ConfigurableController.swift +++ b/Sources/Extensions/UIKit/UIViewController/UIViewController+ConfigurableController.swift @@ -20,14 +20,15 @@ // THE SOFTWARE. // -import UIKit +import UIKit.UIViewController public extension ConfigurableController where Self: UIViewController { - func configureBarButtons() { - // nothing + func initializeView() { + assertionFailure("Use \(initialLoadView) for UIViewController instead!") } + /// Method that should be called in viewDidLoad method of UIViewController. func initialLoadView() { addViews() configureAppearance() diff --git a/Sources/Protocols/ConfigurableController.swift b/Sources/Protocols/Controllers/ConfigurableController.swift similarity index 100% rename from Sources/Protocols/ConfigurableController.swift rename to Sources/Protocols/Controllers/ConfigurableController.swift diff --git a/Sources/Protocols/DataLoading/PaginationDataLoading/PaginationWrappable.swift b/Sources/Protocols/DataLoading/PaginationDataLoading/PaginationWrappable.swift index 250d0bb3..af6452b0 100644 --- a/Sources/Protocols/DataLoading/PaginationDataLoading/PaginationWrappable.swift +++ b/Sources/Protocols/DataLoading/PaginationDataLoading/PaginationWrappable.swift @@ -22,13 +22,6 @@ import UIKit -/// Protocol that contains scroll view property. -public protocol ScrollViewHolder { - - var scrollView: UIScrollView { get } - -} - /// Protocol that contains background view property. public protocol BackgroundViewHolder { @@ -44,4 +37,4 @@ public protocol FooterViewHolder { } /// Protocol that conforms to ScrollViewHolder, BackgroundViewHolder and FooterViewHolder protocols. -public typealias PaginationWrappable = ScrollViewHolder & BackgroundViewHolder & FooterViewHolder +public protocol PaginationWrappable: ScrollViewHolder, BackgroundViewHolder, FooterViewHolder {} diff --git a/Sources/Protocols/UIKit/CollectionViewHolder.swift b/Sources/Protocols/UIKit/CollectionViewHolder.swift new file mode 100644 index 00000000..a5e0c6f6 --- /dev/null +++ b/Sources/Protocols/UIKit/CollectionViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UICollectionView + +/// Protocol that contains table view property. +public protocol CollectionViewHolder { + + /// Contained UICollectionView instance. + var collectionView: UICollectionView { get } + +} diff --git a/Sources/Protocols/UIKit/ScrollViewHolder.swift b/Sources/Protocols/UIKit/ScrollViewHolder.swift new file mode 100644 index 00000000..20cb55f1 --- /dev/null +++ b/Sources/Protocols/UIKit/ScrollViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UIScrollView + +/// Protocol that contains scroll view property. +public protocol ScrollViewHolder { + + /// Contained UIScrollView instance. + var scrollView: UIScrollView { get } + +} diff --git a/Sources/Protocols/UIKit/TableViewHolder.swift b/Sources/Protocols/UIKit/TableViewHolder.swift new file mode 100644 index 00000000..ce8f24c6 --- /dev/null +++ b/Sources/Protocols/UIKit/TableViewHolder.swift @@ -0,0 +1,31 @@ +// +// Copyright (c) 2018 Touch Instinct +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the Software), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import UIKit.UITableView + +/// Protocol that contains table view property. +public protocol TableViewHolder { + + /// Contained UITableView instance. + var tableView: UITableView { get } + +}