base controllers

This commit is contained in:
Ivan Smolin 2018-07-02 20:03:26 +03:00
parent 3a8be1bc8c
commit 2cebfd7ffd
17 changed files with 498 additions and 20 deletions

View File

@ -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",

View File

@ -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 = "<group>"; };
673CF4372063E7CE00C329F6 /* GeneralDataLoadingController+DefaultImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GeneralDataLoadingController+DefaultImplementation.swift"; sourceTree = "<group>"; };
6741C40E20EAC88800418D08 /* GeneralDataLoadingViewModel+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GeneralDataLoadingViewModel+Extensions.swift"; sourceTree = "<group>"; };
6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScrollViewHolder.swift; sourceTree = "<group>"; };
6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TableViewHolder.swift; sourceTree = "<group>"; };
6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionViewHolder.swift; sourceTree = "<group>"; };
6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "TableViewHolder+ScrollViewHolder.swift"; sourceTree = "<group>"; };
6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CollectionViewHolder+ScrollViewHolder.swift"; sourceTree = "<group>"; };
6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+ScrollViewHolder.swift"; sourceTree = "<group>"; };
6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIScrollView+RxBindings.swift"; sourceTree = "<group>"; };
6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+TableViewHolder.swift"; sourceTree = "<group>"; };
6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseCustomViewController.swift; sourceTree = "<group>"; };
6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseConfigurableController.swift; sourceTree = "<group>"; };
674AF55B1EC45B1600038A8F /* UIActivityIndicatorView+LoadingIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIActivityIndicatorView+LoadingIndicator.swift"; sourceTree = "<group>"; };
6762131720A0BBA30034EEF1 /* TableSection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TableSection+Extensions.swift"; sourceTree = "<group>"; };
676B22A1206A626D002E9F8A /* NSAttributedString+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAttributedString+Extensions.swift"; sourceTree = "<group>"; };
@ -912,6 +952,7 @@
isa = PBXGroup;
children = (
36DAAF502007CC920090BE0D /* UITableView+Extensions.swift */,
6741CEC120E2430900FEC4D9 /* UITableView+TableViewHolder.swift */,
);
path = UITableView;
sourceTree = "<group>";
@ -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 = "<group>";
};
6741CE9F20E2413300FEC4D9 /* UIKit */ = {
isa = PBXGroup;
children = (
6741CEA020E2416C00FEC4D9 /* ScrollViewHolder.swift */,
6741CEA420E2418200FEC4D9 /* TableViewHolder.swift */,
6741CEA820E2418B00FEC4D9 /* CollectionViewHolder.swift */,
);
path = UIKit;
sourceTree = "<group>";
};
6741CEAC20E241A000FEC4D9 /* Controllers */ = {
isa = PBXGroup;
children = (
671462241EB3396E00EAB194 /* ConfigurableController.swift */,
);
path = Controllers;
sourceTree = "<group>";
};
6741CEAD20E2428A00FEC4D9 /* TableViewHolder */ = {
isa = PBXGroup;
children = (
6741CEAE20E242A500FEC4D9 /* TableViewHolder+ScrollViewHolder.swift */,
);
path = TableViewHolder;
sourceTree = "<group>";
};
6741CEB220E242B600FEC4D9 /* CollectionViewHolder */ = {
isa = PBXGroup;
children = (
6741CEB320E242C000FEC4D9 /* CollectionViewHolder+ScrollViewHolder.swift */,
);
path = CollectionViewHolder;
sourceTree = "<group>";
};
6741CEB820E242CF00FEC4D9 /* UIScrollView */ = {
isa = PBXGroup;
children = (
6741CEBD20E242FA00FEC4D9 /* UIScrollView+RxBindings.swift */,
6741CEB920E242D900FEC4D9 /* UIScrollView+ScrollViewHolder.swift */,
);
path = UIScrollView;
sourceTree = "<group>";
};
6741CEC520E2434900FEC4D9 /* Controllers */ = {
isa = PBXGroup;
children = (
6741CECD20E243F800FEC4D9 /* BaseConfigurableController.swift */,
6741CECC20E243F800FEC4D9 /* BaseCustomViewController.swift */,
);
path = Controllers;
sourceTree = "<group>";
};
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 */,

View File

@ -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<ViewModel>: 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
}
}

View File

@ -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<ViewModel, View: UIView>: BaseConfigurableController<ViewModel> {
/// 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
}
}

View File

@ -24,10 +24,6 @@ import UIKit.UICollectionView
extension UICollectionView: PaginationWrappable {
public var scrollView: UIScrollView {
return self
}
public var footerView: UIView? {
get {
return nil

View File

@ -24,10 +24,6 @@ import UIKit.UITableView
extension UITableView: PaginationWrappable {
public var scrollView: UIScrollView {
return self
}
public var footerView: UIView? {
get {
return tableFooterView

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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<CGFloat> {
return Binder(base) { base, value in
DispatchQueue.main.async {
base.contentInset.bottom = value
base.scrollIndicatorInsets.bottom = value
}
}
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -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()

View File

@ -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 {}

View File

@ -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 }
}

View File

@ -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 }
}

View File

@ -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 }
}