├── .gitignore ├── CLUIKit+Category ├── CALayer+CLLayer │ ├── CALayer+CLLayer.h │ └── CALayer+CLLayer.m ├── UIAlertController+CLAlertController │ ├── UIAlertController+CLAlertController.h │ └── UIAlertController+CLAlertController.m ├── UIApplication+CLApplication │ ├── UIApplication+CLApplication.h │ └── UIApplication+CLApplication.m ├── UIBarButtonItem+CLBarButtonItem │ ├── UIBarButtonItem+CLBarButtonItem.h │ └── UIBarButtonItem+CLBarButtonItem.m ├── UIBarItem+CLBarItem │ ├── UIBarItem+CLBarItem.h │ └── UIBarItem+CLBarItem.m ├── UIButton+CLButton │ ├── UIButton+CLButton.h │ └── UIButton+CLButton.m ├── UICollectionView+CLCollectionView │ ├── UICollectionView+CLCollectionView.h │ └── UICollectionView+CLCollectionView.m ├── UIColor+CLColor │ ├── UIColor+CLColor.h │ └── UIColor+CLColor.m ├── UIControl+CLControl │ ├── UIControl+CLControl.h │ └── UIControl+CLControl.m ├── UIDevice+CLDevice │ ├── UIDevice+CLDevice.h │ └── UIDevice+CLDevice.m ├── UIFont+CLFont │ ├── UIFont+CLFont.h │ └── UIFont+CLFont.m ├── UIImage+CLImage │ ├── UIImage+CLImage.h │ └── UIImage+CLImage.m ├── UILabel+CLLabel │ ├── UILabel+CLLabel.h │ └── UILabel+CLLabel.m ├── UINavigationController+CLNavigationController │ ├── UINavigationController+CLNavigationController.h │ └── UINavigationController+CLNavigationController.m ├── UINavigationItem+CLNavigationItem │ ├── UINavigationItem+CLNavigationItem.h │ └── UINavigationItem+CLNavigationItem.m ├── UIScreen+CLScreen │ ├── UIScreen+CLScreen.h │ └── UIScreen+CLScreen.m ├── UIScrollView+CLScrollView │ ├── UIScrollView+CLScrollView.h │ └── UIScrollView+CLScrollView.m ├── UITableView+CLTableView │ ├── UITableView+CLTableView.h │ └── UITableView+CLTableView.m ├── UIView+CLView │ ├── UIView+CLView.h │ └── UIView+CLView.m └── UIViewController+CLViewController │ ├── UIViewController+CLViewController.h │ └── UIViewController+CLViewController.m ├── CLUIKit+Resource └── CLResource.bundle │ └── scan_pick.png ├── CLUIKit.podspec ├── CLUIKit ├── CLAnimatorManager │ ├── CLAnimatorManager.h │ └── CLAnimatorManager.m ├── CLButton │ ├── CLButton.h │ └── CLButton.m ├── CLCollectionViewController │ ├── Controller │ │ ├── CLCollectionViewController.h │ │ └── CLCollectionViewController.m │ └── ViewModels │ │ ├── CLCollectionViewDataSource │ │ ├── CLCollectionViewDataSource.h │ │ └── CLCollectionViewDataSource.m │ │ ├── CLCollectionViewDelegate │ │ ├── CLCollectionViewDelegate.h │ │ └── CLCollectionViewDelegate.m │ │ ├── CLCollectionViewDragDelegate │ │ ├── CLCollectionViewDragDelegate.h │ │ └── CLCollectionViewDragDelegate.m │ │ ├── CLCollectionViewDropDelegate │ │ ├── CLCollectionViewDropDelegate.h │ │ └── CLCollectionViewDropDelegate.m │ │ └── CLCollectionViewViewModel │ │ ├── CLCollectionViewViewModel.h │ │ └── CLCollectionViewViewModel.m ├── CLNavigationController │ ├── CLNavigationController.h │ └── CLNavigationController.m ├── CLPickerController │ ├── Controller │ │ ├── CLPickerController.h │ │ └── CLPickerController.m │ ├── ViewModels │ │ ├── CLPickerDataSource │ │ │ ├── CLPickerDataSource.h │ │ │ └── CLPickerDataSource.m │ │ ├── CLPickerDelegate │ │ │ ├── CLPickerDelegate.h │ │ │ └── CLPickerDelegate.m │ │ ├── CLPickerTransitioningDelegate │ │ │ ├── CLPickerTransitioningDelegate.h │ │ │ └── CLPickerTransitioningDelegate.m │ │ └── CLPickerViewModel │ │ │ ├── CLPickerViewModel.h │ │ │ └── CLPickerViewModel.m │ └── Views │ │ ├── CLPickerToolView │ │ ├── CLPickerToolView.h │ │ └── CLPickerToolView.m │ │ └── CLPickerView │ │ ├── CLPickerView.h │ │ └── CLPickerView.m ├── CLPresentationController │ ├── CLPresentationController.h │ └── CLPresentationController.m ├── CLScanQRCode │ ├── Controller │ │ ├── CLScanQRCodeController.h │ │ └── CLScanQRCodeController.m │ └── Views │ │ ├── CLScanQRCodeView.h │ │ └── CLScanQRCodeView.m ├── CLScrollViewController │ ├── Controller │ │ ├── CLScrollViewController.h │ │ └── CLScrollViewController.m │ └── ViewModels │ │ ├── CLScrollViewDelegate │ │ ├── CLScrollViewDelegate.h │ │ └── CLScrollViewDelegate.m │ │ └── CLScrollViewViewModel │ │ ├── CLScrollViewViewModel.h │ │ └── CLScrollViewViewModel.m ├── CLTableViewController │ ├── Controller │ │ ├── CLTableViewController.h │ │ └── CLTableViewController.m │ └── ViewModels │ │ ├── CLTableViewDataSource │ │ ├── CLTableViewDataSource.h │ │ └── CLTableViewDataSource.m │ │ ├── CLTableViewDelegate │ │ ├── CLTableViewDelegate.h │ │ └── CLTableViewDelegate.m │ │ ├── CLTableViewDragDelegate │ │ ├── CLTableViewDragDelegate.h │ │ └── CLTableViewDragDelegate.m │ │ ├── CLTableViewDropDelegate │ │ ├── CLTableViewDropDelegate.h │ │ └── CLTableViewDropDelegate.m │ │ └── CLTableViewViewModel │ │ ├── CLTableViewViewModel.h │ │ └── CLTableViewViewModel.m ├── CLTextField │ ├── CLTextField.h │ └── CLTextField.m ├── CLToolBarListView │ ├── CLToolBarListView.h │ └── CLToolBarListView.m ├── CLUIKit.h ├── CLViewController │ ├── Controller │ │ ├── CLViewController.h │ │ └── CLViewController.m │ └── ViewModels │ │ ├── CLViewControllerTransitioningDelegate │ │ ├── CLViewControllerTransitioningDelegate.h │ │ └── CLViewControllerTransitioningDelegate.m │ │ └── CLViewControllerViewModel │ │ ├── CLViewControllerViewModel.h │ │ └── CLViewControllerViewModel.m └── CLWebViewController │ ├── Controller │ ├── CLWebViewController.h │ └── CLWebViewController.m │ └── ViewModels │ ├── CLWebViewNavigationDelegate │ ├── CLWebViewNavigationDelegate.h │ └── CLWebViewNavigationDelegate.m │ ├── CLWebViewUIDelegate │ ├── CLWebViewUIDelegate.h │ └── CLWebViewUIDelegate.m │ └── CLWebViewViewModel │ ├── CLWebViewViewModel.h │ └── CLWebViewViewModel.m ├── CLUIKitExample ├── CLUIKitExample.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── CLUIKitExample.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── CLUIKitExample │ ├── AppDelegate │ │ ├── AppDelegate.h │ │ └── AppDelegate.m │ ├── Base │ │ ├── EXBaseViewController │ │ │ ├── EXBaseViewController.h │ │ │ └── EXBaseViewController.m │ │ └── UIViewController+EXViewController │ │ │ ├── UIViewController+EXViewController.h │ │ │ └── UIViewController+EXViewController.m │ ├── Module │ │ ├── EXAlert │ │ │ ├── Controller │ │ │ │ ├── AlertController.m │ │ │ │ ├── EXAlertController.h │ │ │ │ └── EXAlertController.m │ │ │ ├── Models │ │ │ │ ├── EXAlertBaseModel.h │ │ │ │ └── EXAlertBaseModel.m │ │ │ └── ViewModels │ │ │ │ ├── EXAlertDataSource │ │ │ │ ├── CLAlertDataSource.h │ │ │ │ ├── EXAlertDataSource.h │ │ │ │ └── EXAlertDataSource.m │ │ │ │ ├── EXAlertDelegate │ │ │ │ ├── CLAlertDelegate.h │ │ │ │ ├── EXAlertDelegate.h │ │ │ │ └── EXAlertDelegate.m │ │ │ │ └── EXAlertViewModel │ │ │ │ ├── EXAlertViewModel.h │ │ │ │ └── EXAlertViewModel.m │ │ ├── EXAnimator │ │ │ ├── EXAnimatorController.h │ │ │ └── EXAnimatorController.m │ │ ├── EXApplication │ │ │ ├── EXApplicationController.h │ │ │ └── EXApplicationController.m │ │ ├── EXBarButtonItem │ │ │ ├── EXBarButtonItemController.h │ │ │ └── EXBarButtonItemController.m │ │ ├── EXButton │ │ │ ├── EXButtonController.h │ │ │ └── EXButtonController.m │ │ ├── EXCollection │ │ │ ├── Controller │ │ │ │ ├── EXCollectionViewController.h │ │ │ │ └── EXCollectionViewController.m │ │ │ └── ViewModels │ │ │ │ ├── EXCollectionViewDataSource │ │ │ │ ├── EXCollectionViewDataSource.h │ │ │ │ └── EXCollectionViewDataSource.m │ │ │ │ ├── EXCollectionViewDelegate │ │ │ │ ├── EXCollectionViewDelegate.h │ │ │ │ └── EXCollectionViewDelegate.m │ │ │ │ └── EXCollectionViewViewModel │ │ │ │ ├── EXCollectionViewViewModel.h │ │ │ │ └── EXCollectionViewViewModel.m │ │ ├── EXColor │ │ │ ├── EXColorController.h │ │ │ └── EXColorController.m │ │ ├── EXDevice │ │ │ ├── EXDeviceController.h │ │ │ └── EXDeviceController.m │ │ ├── EXFont │ │ │ ├── Controller │ │ │ │ ├── EXFontController.h │ │ │ │ └── EXFontController.m │ │ │ ├── Models │ │ │ │ ├── EXFontBaseModel.h │ │ │ │ └── EXFontBaseModel.m │ │ │ └── ViewModels │ │ │ │ ├── EXFontDateSource │ │ │ │ ├── EXFontDateSource.h │ │ │ │ └── EXFontDateSource.m │ │ │ │ ├── EXFontDelegate │ │ │ │ ├── EXFontDelegate.h │ │ │ │ └── EXFontDelegate.m │ │ │ │ └── EXFontViewModel │ │ │ │ ├── EXFontViewModel.h │ │ │ │ └── EXFontViewModel.m │ │ ├── EXImage │ │ │ ├── EXImageController.h │ │ │ └── EXImageController.m │ │ ├── EXLabel │ │ │ ├── EXLabelController.h │ │ │ └── EXLabelController.m │ │ ├── EXPickerController │ │ │ ├── Controller │ │ │ │ ├── EXPickerController.h │ │ │ │ └── EXPickerController.m │ │ │ └── ViewModels │ │ │ │ ├── EXPickerDataSource │ │ │ │ ├── EXPickerDataSource.h │ │ │ │ └── EXPickerDataSource.m │ │ │ │ ├── EXPickerDelegate │ │ │ │ ├── EXPickerDelegate.h │ │ │ │ └── EXPickerDelegate.m │ │ │ │ └── EXPickerViewModel │ │ │ │ ├── EXPickerViewModel.h │ │ │ │ └── EXPickerViewModel.m │ │ ├── EXPresentationController │ │ │ ├── Controller │ │ │ │ ├── EXPresentationController.h │ │ │ │ └── EXPresentationController.m │ │ │ └── ViewModels │ │ │ │ ├── EXPresentationTransitioningDelegate.h │ │ │ │ └── EXPresentationTransitioningDelegate.m │ │ ├── EXRoot │ │ │ ├── Controller │ │ │ │ ├── EXRootController.h │ │ │ │ └── EXRootController.m │ │ │ ├── Models │ │ │ │ ├── EXRootBaseModel.h │ │ │ │ └── EXRootBaseModel.m │ │ │ └── ViewModels │ │ │ │ ├── EXRootDataSource │ │ │ │ ├── EXRootDataSource.h │ │ │ │ └── EXRootDataSource.m │ │ │ │ ├── EXRootDelegate │ │ │ │ ├── EXRootDelegate.h │ │ │ │ └── EXRootDelegate.m │ │ │ │ └── EXRootViewModel │ │ │ │ ├── EXRootViewModel.h │ │ │ │ └── EXRootViewModel.m │ │ ├── EXScanQRCode │ │ │ ├── EXScanQRCodeController.h │ │ │ └── EXScanQRCodeController.m │ │ ├── EXScreen │ │ │ ├── EXScreenController.h │ │ │ └── EXScreenController.m │ │ ├── EXScrollView │ │ │ ├── Controller │ │ │ │ ├── EXScrollViewController.h │ │ │ │ └── EXScrollViewController.m │ │ │ └── ViewModels │ │ │ │ ├── EXScrollViewDelegate │ │ │ │ ├── EXScrollViewDelegate.h │ │ │ │ └── EXScrollViewDelegate.m │ │ │ │ └── EXScrollViewViewModel │ │ │ │ ├── EXScrollViewViewModel.h │ │ │ │ └── EXScrollViewViewModel.m │ │ ├── EXTableView │ │ │ ├── Controller │ │ │ │ ├── EXTableViewController.h │ │ │ │ └── EXTableViewController.m │ │ │ └── ViewModels │ │ │ │ ├── EXTableViewDataSource │ │ │ │ ├── EXTableViewDataSource.h │ │ │ │ └── EXTableViewDataSource.m │ │ │ │ ├── EXTableViewDelegate │ │ │ │ ├── EXTableViewDelegate.h │ │ │ │ └── EXTableViewDelegate.m │ │ │ │ └── EXTableViewViewModel │ │ │ │ ├── EXTableViewViewModel.h │ │ │ │ └── EXTableViewViewModel.m │ │ ├── EXTextField │ │ │ ├── EXTextFieldController.h │ │ │ └── EXTextFieldController.m │ │ └── EXWebView │ │ │ ├── Controller │ │ │ ├── EXWebViewController.h │ │ │ └── EXWebViewController.m │ │ │ └── ViewModels │ │ │ ├── EXWebViewNavigationDelegate │ │ │ ├── EXWebViewNavigationDelegate.h │ │ │ └── EXWebViewNavigationDelegate.m │ │ │ ├── EXWebViewUIDelegate │ │ │ ├── EXWebViewUIDelegate.h │ │ │ └── EXWebViewUIDelegate.m │ │ │ └── EXWebViewViewModel │ │ │ ├── EXWebViewViewModel.h │ │ │ └── EXWebViewViewModel.m │ └── Resource │ │ ├── Assets.xcassets │ │ ├── 1.imageset │ │ │ ├── 1.png │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-20.png │ │ │ ├── Icon-60.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-76@2x.png │ │ │ ├── Icon-Small.png │ │ │ ├── Icon-Small@2x-1.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x-1.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ ├── Icon-Spotlight-40@3x.png │ │ │ ├── Icon-Spotlight-41.png │ │ │ ├── Icon-Spotlight-42.png │ │ │ ├── Icon-iPadPro@2x.png │ │ │ └── iCon1024.png │ │ ├── Contents.json │ │ ├── LaunchImage.launchimage │ │ │ ├── Contents.json │ │ │ ├── Screen4.0.png │ │ │ ├── Screen4.7.png │ │ │ ├── Screen5.5.png │ │ │ └── Screen5.8.png │ │ ├── TabBar │ │ │ ├── Contents.json │ │ │ ├── tab_home.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tab_home@2x.png │ │ │ │ └── tab_home@3x.png │ │ │ └── tab_homeH.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tab_homeH@2x.png │ │ │ │ └── tab_homeH@3x.png │ │ ├── dog.imageset │ │ │ ├── Contents.json │ │ │ └── dog.png │ │ ├── icon1.imageset │ │ │ ├── Contents.json │ │ │ └── icon1.png │ │ └── navigationBarImage.imageset │ │ │ ├── Contents.json │ │ │ └── navigationBarImage.png │ │ ├── Base.lproj │ │ └── LaunchScreen.storyboard │ │ ├── CLUIKitExample-PrefixHeader.pch │ │ ├── Info.plist │ │ ├── gif.gif │ │ └── main.m ├── Podfile ├── Podfile.lock └── Pods │ ├── CLFoundation │ ├── CLFoundation+Category │ │ ├── NSArray+CLArray │ │ │ ├── NSArray+CLArray.h │ │ │ └── NSArray+CLArray.m │ │ ├── NSAttributedString+CLAttributedString │ │ │ ├── NSAttributedString+CLAttributedString.h │ │ │ └── NSAttributedString+CLAttributedString.m │ │ ├── NSBundle+CLBundle │ │ │ ├── NSBundle+CLBundle.h │ │ │ └── NSBundle+CLBundle.m │ │ ├── NSData+CLData │ │ │ ├── NSData+CLData.h │ │ │ └── NSData+CLData.m │ │ ├── NSDate+CLDate │ │ │ ├── NSDate+CLDate.h │ │ │ └── NSDate+CLDate.m │ │ ├── NSDictionary+CLDictionary │ │ │ ├── NSDictionary+CLDictionary.h │ │ │ └── NSDictionary+CLDictionary.m │ │ ├── NSFileManager+CLFileManager │ │ │ ├── NSFileManager+CLFileManager.h │ │ │ └── NSFileManager+CLFileManager.m │ │ ├── NSMutableArray+CLMutableArray │ │ │ ├── NSMutableArray+CLMutableArray.h │ │ │ └── NSMutableArray+CLMutableArray.m │ │ ├── NSMutableAttributedString+CLMutableAttributedString │ │ │ ├── NSMutableAttributedString+CLMutableAttributedString.h │ │ │ └── NSMutableAttributedString+CLMutableAttributedString.m │ │ ├── NSMutableDictionary+CLMutableDictionary │ │ │ ├── NSMutableDictionary+CLMutableDictionary.h │ │ │ └── NSMutableDictionary+CLMutableDictionary.m │ │ ├── NSNotificationCenter+CLNotificationCenter │ │ │ ├── NSNotificationCenter+CLNotificationCenter.h │ │ │ └── NSNotificationCenter+CLNotificationCenter.m │ │ ├── NSNumber+CLNumber │ │ │ ├── NSNumber+CLNumber.h │ │ │ └── NSNumber+CLNumber.m │ │ ├── NSObject+CLObject │ │ │ ├── NSObject+CLObject.h │ │ │ └── NSObject+CLObject.m │ │ ├── NSString+CLString │ │ │ ├── NSString+CLString.h │ │ │ └── NSString+CLString.m │ │ ├── NSTimer+CLTimer │ │ │ ├── NSTimer+CLTimer.h │ │ │ └── NSTimer+CLTimer.m │ │ └── NSURL+CLURL │ │ │ ├── NSURL+CLURL.h │ │ │ └── NSURL+CLURL.m │ ├── CLFoundation │ │ ├── CLFoundation.h │ │ └── CLSpeechSynthesizer │ │ │ ├── CLSpeechSynthesizer.h │ │ │ └── CLSpeechSynthesizer.m │ ├── LICENSE │ └── README.md │ ├── MJRefresh │ ├── LICENSE │ ├── MJRefresh │ │ ├── Base │ │ │ ├── MJRefreshAutoFooter.h │ │ │ ├── MJRefreshAutoFooter.m │ │ │ ├── MJRefreshBackFooter.h │ │ │ ├── MJRefreshBackFooter.m │ │ │ ├── MJRefreshComponent.h │ │ │ ├── MJRefreshComponent.m │ │ │ ├── MJRefreshFooter.h │ │ │ ├── MJRefreshFooter.m │ │ │ ├── MJRefreshHeader.h │ │ │ └── MJRefreshHeader.m │ │ ├── Custom │ │ │ ├── Footer │ │ │ │ ├── Auto │ │ │ │ │ ├── MJRefreshAutoGifFooter.h │ │ │ │ │ ├── MJRefreshAutoGifFooter.m │ │ │ │ │ ├── MJRefreshAutoNormalFooter.h │ │ │ │ │ ├── MJRefreshAutoNormalFooter.m │ │ │ │ │ ├── MJRefreshAutoStateFooter.h │ │ │ │ │ └── MJRefreshAutoStateFooter.m │ │ │ │ └── Back │ │ │ │ │ ├── MJRefreshBackGifFooter.h │ │ │ │ │ ├── MJRefreshBackGifFooter.m │ │ │ │ │ ├── MJRefreshBackNormalFooter.h │ │ │ │ │ ├── MJRefreshBackNormalFooter.m │ │ │ │ │ ├── MJRefreshBackStateFooter.h │ │ │ │ │ └── MJRefreshBackStateFooter.m │ │ │ └── Header │ │ │ │ ├── MJRefreshGifHeader.h │ │ │ │ ├── MJRefreshGifHeader.m │ │ │ │ ├── MJRefreshNormalHeader.h │ │ │ │ ├── MJRefreshNormalHeader.m │ │ │ │ ├── MJRefreshStateHeader.h │ │ │ │ └── MJRefreshStateHeader.m │ │ ├── MJRefresh.bundle │ │ │ ├── arrow@2x.png │ │ │ ├── en.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── zh-Hans.lproj │ │ │ │ └── Localizable.strings │ │ │ └── zh-Hant.lproj │ │ │ │ └── Localizable.strings │ │ ├── MJRefresh.h │ │ ├── MJRefreshConst.h │ │ ├── MJRefreshConst.m │ │ ├── NSBundle+MJRefresh.h │ │ ├── NSBundle+MJRefresh.m │ │ ├── UIScrollView+MJExtension.h │ │ ├── UIScrollView+MJExtension.m │ │ ├── UIScrollView+MJRefresh.h │ │ ├── UIScrollView+MJRefresh.m │ │ ├── UIView+MJExtension.h │ │ └── UIView+MJExtension.m │ └── README.md │ ├── Manifest.lock │ ├── Masonry │ ├── LICENSE │ ├── Masonry │ │ ├── MASCompositeConstraint.h │ │ ├── MASCompositeConstraint.m │ │ ├── MASConstraint+Private.h │ │ ├── MASConstraint.h │ │ ├── MASConstraint.m │ │ ├── MASConstraintMaker.h │ │ ├── MASConstraintMaker.m │ │ ├── MASLayoutConstraint.h │ │ ├── MASLayoutConstraint.m │ │ ├── MASUtilities.h │ │ ├── MASViewAttribute.h │ │ ├── MASViewAttribute.m │ │ ├── MASViewConstraint.h │ │ ├── MASViewConstraint.m │ │ ├── Masonry.h │ │ ├── NSArray+MASAdditions.h │ │ ├── NSArray+MASAdditions.m │ │ ├── NSArray+MASShorthandAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.m │ │ ├── View+MASAdditions.h │ │ ├── View+MASAdditions.m │ │ ├── View+MASShorthandAdditions.h │ │ ├── ViewController+MASAdditions.h │ │ └── ViewController+MASAdditions.m │ └── README.md │ ├── Pods.xcodeproj │ └── project.pbxproj │ ├── Target Support Files │ ├── CLFoundation │ │ ├── CLFoundation-dummy.m │ │ ├── CLFoundation-prefix.pch │ │ ├── CLFoundation-umbrella.h │ │ ├── CLFoundation.modulemap │ │ ├── CLFoundation.xcconfig │ │ └── Info.plist │ ├── MJRefresh │ │ ├── Info.plist │ │ ├── MJRefresh-dummy.m │ │ ├── MJRefresh-prefix.pch │ │ ├── MJRefresh-umbrella.h │ │ ├── MJRefresh.modulemap │ │ └── MJRefresh.xcconfig │ ├── Masonry │ │ ├── Info.plist │ │ ├── Masonry-dummy.m │ │ ├── Masonry-prefix.pch │ │ ├── Masonry-umbrella.h │ │ ├── Masonry.modulemap │ │ └── Masonry.xcconfig │ ├── Pods-CLUIKitExample │ │ ├── Info.plist │ │ ├── Pods-CLUIKitExample-acknowledgements.markdown │ │ ├── Pods-CLUIKitExample-acknowledgements.plist │ │ ├── Pods-CLUIKitExample-dummy.m │ │ ├── Pods-CLUIKitExample-frameworks.sh │ │ ├── Pods-CLUIKitExample-resources.sh │ │ ├── Pods-CLUIKitExample-umbrella.h │ │ ├── Pods-CLUIKitExample.debug.xcconfig │ │ ├── Pods-CLUIKitExample.modulemap │ │ └── Pods-CLUIKitExample.release.xcconfig │ └── YYModel │ │ ├── Info.plist │ │ ├── YYModel-dummy.m │ │ ├── YYModel-prefix.pch │ │ ├── YYModel-umbrella.h │ │ ├── YYModel.modulemap │ │ └── YYModel.xcconfig │ └── YYModel │ ├── LICENSE │ ├── README.md │ └── YYModel │ ├── NSObject+YYModel.h │ ├── NSObject+YYModel.m │ ├── YYClassInfo.h │ ├── YYClassInfo.m │ └── YYModel.h ├── LICENSE ├── README.md └── iCons ├── Screen ├── Screen4.0.png ├── Screen4.7.png ├── Screen5.5.png └── Screen5.8.png ├── iCon1024.png ├── iPad ├── Icon-20.png ├── Icon-72.png ├── Icon-72@2x.png ├── Icon-76.png ├── Icon-76@2x.png ├── Icon-76@3x.png ├── Icon-Small-50.png ├── Icon-Small-50@2x.png ├── Icon-Small.png ├── Icon-Small@2x.png ├── Icon-Small@3x.png ├── Icon-Spotlight-40.png ├── Icon-Spotlight-40@2x.png ├── Icon-Spotlight-40@3x.png ├── Icon-iPadPro@2x.png ├── iTunesArtwork └── iTunesArtwork@2x └── iPhone ├── Icon-60.png ├── Icon-60@2x.png ├── Icon-60@3x.png ├── Icon-Small.png ├── Icon-Small@2x.png ├── Icon-Small@3x.png ├── Icon-Spotlight-40.png ├── Icon-Spotlight-40@2x.png ├── Icon-Spotlight-40@3x.png ├── Icon.png ├── Icon@2x.png ├── iTunesArtwork └── iTunesArtwork@2x /CLUIKit+Category/CALayer+CLLayer/CALayer+CLLayer.h: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+CLLayer.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CALayer (CLLayer) 14 | 15 | /** 16 | 把指定的CALayer排序到所有CALayer的最后面 17 | 18 | @param sublayer CALayer 19 | */ 20 | - (void)cl_sendLayerBackWithSubLayer:(CALayer *)sublayer; 21 | 22 | /** 23 | 把指定的CALayer排序到所有CALayer的前面 24 | 25 | @param sublayer CALayer 26 | */ 27 | - (void)cl_bringLayerFrontWithSublayer:(CALayer *)sublayer; 28 | 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /CLUIKit+Category/CALayer+CLLayer/CALayer+CLLayer.m: -------------------------------------------------------------------------------- 1 | // 2 | // CALayer+CLLayer.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CALayer+CLLayer.h" 10 | 11 | @implementation CALayer (CLLayer) 12 | 13 | - (void)cl_sendLayerBackWithSubLayer:(CALayer *)sublayer { 14 | 15 | if (sublayer.superlayer == self) { 16 | 17 | [sublayer removeFromSuperlayer]; 18 | 19 | [self insertSublayer:sublayer 20 | atIndex:0]; 21 | } 22 | } 23 | 24 | - (void)cl_bringLayerFrontWithSublayer:(CALayer *)sublayer { 25 | 26 | if (sublayer.superlayer == self) { 27 | 28 | [sublayer removeFromSuperlayer]; 29 | 30 | [self insertSublayer:sublayer 31 | atIndex:(unsigned)self.sublayers.count]; 32 | } 33 | } 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIBarButtonItem+CLBarButtonItem/UIBarButtonItem+CLBarButtonItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // UIBarButtonItem+CLBarButtonItem.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | typedef void (^CLBarButtonItemAction)(UIBarButtonItem *sender); 19 | 20 | NS_ASSUME_NONNULL_BEGIN 21 | @interface UIBarButtonItem (CLBarButtonItem) 22 | 23 | @property (nullable, nonatomic, copy) CLBarButtonItemAction cl_barButtonItemAction; 24 | 25 | 26 | @end 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIBarItem+CLBarItem/UIBarItem+CLBarItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarItem+CLBarItem.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface UIBarItem (CLBarItem) 14 | 15 | - (UIView *)cl_barItemView; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIBarItem+CLBarItem/UIBarItem+CLBarItem.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIBarItem+CLBarItem.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "UIBarItem+CLBarItem.h" 10 | 11 | @implementation UIBarItem (CLBarItem) 12 | 13 | - (UIView *)cl_barItemView { 14 | return [self valueForKey:@"view"]; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKit+Category/UICollectionView+CLCollectionView/UICollectionView+CLCollectionView.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // UICollectionView+CLCollectionView.h 10 | // SimpleProject 11 | // 12 | // Created by Cain Luo on 2018/1/21. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | @protocol CLCollectionViewPlaceholderDelegate 19 | 20 | @required 21 | 22 | /** 23 | 设置一个UICollectionView占位图 24 | 25 | @return UIView 26 | */ 27 | - (UIView *)cl_placeholderView; 28 | 29 | @optional 30 | 31 | /** 32 | 出现占位图的时候是否允许滑动 33 | 34 | @return BOOL 35 | */ 36 | - (BOOL)cl_scrollEnabledWithShowPlaceholderView; 37 | 38 | @end 39 | 40 | @interface UICollectionView (CLCollectionView) 41 | 42 | /** 43 | 刷新并加载占位图 44 | */ 45 | - (void)cl_reloadData; 46 | 47 | /** 48 | 删除占位图 49 | */ 50 | - (void)cl_removePlaceholderViewWithSuperView; 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIControl+CLControl/UIControl+CLControl.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIControl+CLControl.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/3/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^CLControlAction)(id sender); 12 | 13 | @interface CLControlActionBlockObject : NSObject 14 | 15 | /** 16 | CLControlAction Typedef 17 | */ 18 | @property (nonatomic, copy) CLControlAction cl_controlAction; 19 | 20 | /** 21 | UIControlEvents枚举 22 | */ 23 | @property (nonatomic, assign) UIControlEvents cl_controlEvents; 24 | 25 | /** 26 | CLControlActionBlockObject的Action事件 27 | 28 | @param sender id 29 | */ 30 | - (void)cl_controlInvokeBlock:(id)sender; 31 | 32 | @end 33 | 34 | @interface UIControl (CLControl) 35 | 36 | /** 37 | 给UIControl添加Action事件 38 | 39 | @param controlEvents UIControlEvents 40 | @param complete CLControlAction 41 | */ 42 | - (void)cl_addControlActionWithEvents:(UIControlEvents)controlEvents 43 | complete:(CLControlAction)complete; 44 | 45 | /** 46 | 设置UIControl的Action事件 47 | 48 | @param controlEvents UIControlEvents 49 | @param complete CLControlAction 50 | */ 51 | - (void)cl_setControlActionWithEvents:(UIControlEvents)controlEvents 52 | complete:(CLControlAction)complete; 53 | 54 | /** 55 | 删除UIControl的Action事件 56 | 57 | @param controlEvents UIControlEvents 58 | */ 59 | - (void)cl_removeControlActionWithEvents:(UIControlEvents)controlEvents; 60 | 61 | /** 62 | 删除所有的Action事件 63 | */ 64 | - (void)cl_removeAllActions; 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /CLUIKit+Category/UILabel+CLLabel/UILabel+CLLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // UILabel+CLLabel.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2019/1/7. 13 | // Copyright © 2019 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | NS_ASSUME_NONNULL_BEGIN 19 | 20 | @interface UILabel (CLLabel) 21 | 22 | - (CGFloat)cl_getLabelLineHeight; 23 | - (CGFloat)cl_getLabelTextHeight; 24 | - (CGFloat)cl_getLabelTextWidth; 25 | 26 | - (NSInteger)cl_getLabelNumberOfLines; 27 | 28 | - (CGSize)cl_fitLabelSizeForLimitedSize:(CGSize)size; 29 | 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /CLUIKit+Category/UINavigationController+CLNavigationController/UINavigationController+CLNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // UINavigationController+CLNavigationController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/3/27. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UINavigationController (CLNavigationController) 12 | 13 | /** 14 | 获取指定类名的UIViewController 15 | 16 | @param className NSString 17 | @return UIViewController 18 | */ 19 | - (UIViewController *)cl_findViewControllerWithClassName:(NSString *)className; 20 | 21 | /** 22 | 获取UIViewController的索引 23 | 24 | @param viewController UIViewController 25 | @return NSUInteger 26 | */ 27 | - (NSUInteger)cl_getIndexWithViewController:(UIViewController *)viewController; 28 | 29 | /** 30 | 获取UINavigationController的FirstViewController 31 | 32 | @return UIViewController 33 | */ 34 | - (UIViewController *)cl_getFirstViewController; 35 | 36 | /** 37 | Pop到指定类名的UIViewController 38 | 39 | @param className NSString 40 | @return NSArray 41 | */ 42 | - (NSArray *)cl_popToViewControllerWithClassName:(NSString *)className 43 | animated:(BOOL)animated; 44 | 45 | /** 46 | Pop到指定层级的UIViewController 47 | 48 | @param level NSUInteger 49 | @param animated BOOL 50 | @return NSArray 51 | */ 52 | - (NSArray *)cl_popToViewControllerWithLevel:(NSUInteger)level 53 | animated:(BOOL)animated; 54 | 55 | /** 56 | 获取UINavigationBar的高度 57 | 58 | @return CGFloat 59 | */ 60 | - (CGFloat)cl_getNavigationBarHeight; 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /CLUIKit+Category/UINavigationItem+CLNavigationItem/UINavigationItem+CLNavigationItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // UINavigationItem+CLNavigationItem.h 10 | // Example 11 | // 12 | // Created by Mac on 2017/10/11. 13 | // Copyright © 2017年 EStrongersoft Co., LTD. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | @interface UINavigationItem (CLNavigationItem) 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIScreen+CLScreen/UIScreen+CLScreen.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // UIScreen+CLScreen.h 10 | // 11 | // Created by Cain Luo on 11/10/16. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | 17 | @interface UIScreen (CLScreen) 18 | 19 | /** 20 | 获取屏幕的比例 21 | 22 | @return CGFloat 23 | */ 24 | + (CGFloat)cl_getScreenScale; 25 | 26 | /** 27 | 获取屏幕的尺寸 28 | 29 | @return CGSize 30 | */ 31 | + (CGSize)cl_getScreenSize; 32 | 33 | /** 34 | 获取屏幕宽度 35 | 36 | @return CGFloat 37 | */ 38 | + (CGFloat)cl_getScreenWidth; 39 | 40 | /** 41 | 获取屏幕高度 42 | 43 | @return CGFloat 44 | */ 45 | + (CGFloat)cl_getScreenHeight; 46 | 47 | /** 48 | iPhone是以 (iPhone 6)1334x750 为基准, iPad是以 (iPad Pro 10.5)2224x1668 为基准 49 | 50 | @param value UI原始值 51 | @return CGFloat 52 | */ 53 | + (CGFloat)cl_fitScreen:(CGFloat)value; 54 | 55 | /** 56 | 适配iPhone Plus机型的尺寸 57 | 58 | @param value UI原始值 59 | @return CGFloat 60 | */ 61 | + (CGFloat)cl_fitPlusScreen:(CGFloat)value; 62 | 63 | /** 64 | 获取UITabBar的高度 65 | 66 | @return CGFloat 67 | */ 68 | + (CGFloat)cl_getTabBarHeight; 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIScrollView+CLScrollView/UIScrollView+CLScrollView.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+CLScrollView.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/3/27. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIScrollView (CLScrollView) 12 | 13 | /** 14 | 移动到UIScrollView的最顶端 15 | 16 | @param animated BOOL 17 | */ 18 | - (void)cl_scrollViewToTopWithAnimated:(BOOL)animated; 19 | 20 | /** 21 | 移动到UIScrollView的最左边 22 | 23 | @param animated BOOL 24 | */ 25 | - (void)cl_scrollViewToLeftWithAnimated:(BOOL)animated; 26 | 27 | /** 28 | 移动到UIScrollView的最底端 29 | 30 | @param animated BOOL 31 | */ 32 | - (void)cl_scrollViewToBottomWithAnimated:(BOOL)animated; 33 | 34 | /** 35 | 移动到UIScrollView的最右边 36 | 37 | @param animated BOOL 38 | */ 39 | - (void)cl_scrollViewToRightWithAnimated:(BOOL)animated; 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /CLUIKit+Category/UIScrollView+CLScrollView/UIScrollView+CLScrollView.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIScrollView+CLScrollView.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/3/27. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "UIScrollView+CLScrollView.h" 10 | 11 | @implementation UIScrollView (CLScrollView) 12 | 13 | - (void)cl_scrollViewToTopWithAnimated:(BOOL)animated { 14 | 15 | [self setContentOffset:CGPointMake(0, 0) 16 | animated:animated]; 17 | } 18 | 19 | - (void)cl_scrollViewToLeftWithAnimated:(BOOL)animated { 20 | 21 | [self setContentOffset:CGPointMake(0, self.contentInset.left) 22 | animated:animated]; 23 | } 24 | 25 | - (void)cl_scrollViewToBottomWithAnimated:(BOOL)animated { 26 | 27 | CGFloat cl_scrollViewBottom = self.contentSize.height - self.bounds.size.height + self.contentInset.bottom; 28 | 29 | [self setContentOffset:CGPointMake(0, cl_scrollViewBottom) 30 | animated:animated]; 31 | } 32 | 33 | - (void)cl_scrollViewToRightWithAnimated:(BOOL)animated { 34 | 35 | CGFloat cl_scrollViewRight = self.contentSize.width - self.bounds.size.width + self.contentInset.right; 36 | 37 | [self setContentOffset:CGPointMake(0, cl_scrollViewRight) 38 | animated:animated]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /CLUIKit+Resource/CLResource.bundle/scan_pick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKit+Resource/CLResource.bundle/scan_pick.png -------------------------------------------------------------------------------- /CLUIKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | 3 | spec.name = "CLUIKit" 4 | spec.version = "2.6.0" 5 | spec.summary = "CLUIKit for iOS" 6 | spec.homepage = "https://github.com/CainLuo/CLUIKit" 7 | spec.license = { :type => "MIT", :file => "LICENSE" } 8 | spec.author = { "CainLuo" => "350116542@qq.com" } 9 | spec.platform = :ios, '8.0' 10 | spec.source = { :git => "https://github.com/CainLuo/CLUIKit.git", :tag => "#{spec.version}" } 11 | spec.source_files = "CLUIKit/**/*.{h,m}" 12 | spec.requires_arc = true 13 | spec.frameworks = 'UIKit', 'Foundation' 14 | spec.library = "resolv" 15 | 16 | spec.resource = 'CLUIKit+Resource/CLResource.bundle' 17 | 18 | spec.dependency "MJRefresh" 19 | spec.dependency "CLFoundation" 20 | spec.dependency "Masonry" 21 | 22 | spec.subspec 'CLUIKit+Category' do |category| 23 | 24 | category.source_files = 'CLUIKit+Category/**/*.{h,m}' 25 | end 26 | 27 | end 28 | -------------------------------------------------------------------------------- /CLUIKit/CLButton/CLButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLButton.h 10 | // 11 | // Created by Cain on 2017/8/31. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | 17 | typedef NS_ENUM(NSInteger, CLButtonStyle) { 18 | 19 | CLButtonImageTopStyle = 0, 20 | CLButtonImageLeftStyle, 21 | CLButtonImageBottomStyle, 22 | CLButtonImageRightStyle 23 | }; 24 | 25 | @interface CLButton : UIButton 26 | 27 | /** 28 | 设置图片显示的样式 29 | */ 30 | @property (nonatomic, assign) CLButtonStyle cl_buttomImageStyle; 31 | 32 | /** 33 | 图片与文字之间的间距, 默认: 10 34 | */ 35 | @property (nonatomic, assign) CGFloat cl_imageSpacing; 36 | 37 | /** 38 | 设置图片的尺寸 39 | */ 40 | @property (nonatomic, assign) CGSize cl_imageSize; 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDataSource/CLCollectionViewDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDataSource.h 10 | // 11 | // Created by Cain on 2017/7/12. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import "CLCollectionViewViewModel.h" 17 | 18 | @interface CLCollectionViewDataSource : NSObject 19 | 20 | /** 21 | 只读的CLCollectionViewViewModel 22 | */ 23 | @property (nonatomic, weak, readonly) CLCollectionViewViewModel *cl_viewModel; 24 | 25 | /** 26 | CLCollectionViewDataSource自定义初始化 27 | 28 | @param viewModel CLCollectionViewViewModel 29 | @return self 30 | */ 31 | - (instancetype)initCollectionViewDataSourceWithViewModel:(CLCollectionViewViewModel *)viewModel; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDelegate/CLCollectionViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDelegate.h 10 | // 11 | // Created by Cain on 2016/12/1. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import 17 | #import "CLCollectionViewViewModel.h" 18 | 19 | @interface CLCollectionViewDelegate : NSObject 20 | 21 | /** 22 | 只读的CLCollectionViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLCollectionViewViewModel *cl_viewModel; 25 | 26 | /** 27 | CLCollectionViewViewModel自定义初始化 28 | 29 | @param viewModel CLCollectionViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initCollectionViewDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDelegate/CLCollectionViewDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDelegate.m 10 | // 11 | // Created by Cain on 2016/12/1. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import "CLCollectionViewDelegate.h" 16 | 17 | @interface CLCollectionViewDelegate () 18 | 19 | @property (nonatomic, weak, readwrite) CLCollectionViewViewModel *cl_viewModel; 20 | 21 | @end 22 | 23 | @implementation CLCollectionViewDelegate 24 | 25 | - (instancetype)initCollectionViewDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel { 26 | 27 | self = [super init]; 28 | 29 | if (self) { 30 | self.cl_viewModel = viewModel; 31 | } 32 | 33 | return self; 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDragDelegate/CLCollectionViewDragDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDragDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLCollectionViewViewModel.h" 18 | 19 | @interface CLCollectionViewDragDelegate : NSObject 20 | 21 | /** 22 | 只读的CLCollectionViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLCollectionViewViewModel *cl_viewModel; 25 | 26 | /** 27 | CLCollectionViewDragDelegate自定义初始化 28 | 29 | @param viewModel CLCollectionViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initCollectionViewDragDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDragDelegate/CLCollectionViewDragDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDragDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLCollectionViewDragDelegate.h" 17 | 18 | @interface CLCollectionViewDragDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLCollectionViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLCollectionViewDragDelegate 25 | 26 | - (instancetype)initCollectionViewDragDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (nonnull NSArray *)collectionView:(nonnull UICollectionView *)collectionView 39 | itemsForBeginningDragSession:(nonnull id)session 40 | atIndexPath:(nonnull NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) { 41 | 42 | return nil; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDropDelegate/CLCollectionViewDropDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDropDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLCollectionViewViewModel.h" 18 | 19 | @interface CLCollectionViewDropDelegate : NSObject 20 | 21 | /** 22 | 只读的CLCollectionViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLCollectionViewViewModel *cl_viewModel; 25 | 26 | /** 27 | CLCollectionViewDropDelegate自定义初始化 28 | 29 | @param viewModel CLCollectionViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initCollectionViewDropDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewDropDelegate/CLCollectionViewDropDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewDropDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLCollectionViewDropDelegate.h" 17 | 18 | @interface CLCollectionViewDropDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLCollectionViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLCollectionViewDropDelegate 25 | 26 | - (instancetype)initCollectionViewDropDelegateWithViewModel:(CLCollectionViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (void)collectionView:(nonnull UICollectionView *)collectionView 39 | performDropWithCoordinator:(nonnull id)coordinator API_AVAILABLE(ios(11.0)){ 40 | 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewViewModel/CLCollectionViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewBaseModel.h 10 | // 11 | // Created by Cain on 2016/12/1. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import "CLCollectionViewController.h" 17 | 18 | @interface CLCollectionViewViewModel : NSObject 19 | 20 | /** 21 | 数据源NSMutableArray 22 | */ 23 | @property (nonatomic, strong, readonly) NSMutableArray *cl_dataSource; 24 | 25 | /** 26 | 只读的CLCollectionViewController 27 | */ 28 | @property (nonatomic, weak, readonly) CLCollectionViewController *cl_collectionViewController; 29 | 30 | /** 31 | CLCollectionViewViewModel自定义初始化 32 | 33 | @param viewController CLCollectionViewController 34 | @return self 35 | */ 36 | - (instancetype)initCollectionViewBaseModelWithController:(CLCollectionViewController *)viewController; 37 | 38 | /** 39 | 刷新UICollectionView的方法, 需要外部重载, 默认不实现任何东西 40 | */ 41 | - (void)cl_collectionViewHTTPRequest; 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /CLUIKit/CLCollectionViewController/ViewModels/CLCollectionViewViewModel/CLCollectionViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLCollectionViewBaseModel.m 10 | // 11 | // Created by Cain on 2016/12/1. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import "CLCollectionViewViewModel.h" 16 | 17 | @interface CLCollectionViewViewModel () 18 | 19 | @property (nonatomic, strong, readwrite) NSMutableArray *cl_dataSource; 20 | 21 | @property (nonatomic, weak, readwrite) CLCollectionViewController *cl_collectionViewController; 22 | 23 | @end 24 | 25 | @implementation CLCollectionViewViewModel 26 | 27 | - (instancetype)initCollectionViewBaseModelWithController:(CLCollectionViewController *)viewController { 28 | 29 | self = [super init]; 30 | 31 | if (self) { 32 | self.cl_collectionViewController = viewController; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (void)cl_collectionViewHTTPRequest { 39 | 40 | } 41 | 42 | - (NSMutableArray *)cl_dataSource { 43 | 44 | if (!_cl_dataSource) { 45 | 46 | _cl_dataSource = [NSMutableArray array]; 47 | } 48 | 49 | return _cl_dataSource; 50 | } 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /CLUIKit/CLNavigationController/CLNavigationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLNavigationController.h 10 | // 11 | // Created by Cain on 2017/7/12. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | 17 | @interface CLNavigationController : UINavigationController 18 | 19 | /** 20 | 设置UINavigationBar的背景图 21 | */ 22 | @property (nonatomic, strong) UIImage *cl_backgroundImage; 23 | 24 | /** 25 | 设置UINavigationBar的Tint Color 26 | */ 27 | @property (nonatomic, strong) UIColor *cl_tintColor; 28 | 29 | /** 30 | 设置UINavigationBar的Foreground Color 31 | */ 32 | @property (nonatomic, strong) UIColor *cl_foregroundColor; 33 | 34 | /** 35 | 设置UINavigationBar的Shadow Image 36 | */ 37 | @property (nonatomic, strong) UIImage *cl_shadowImage; 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/Controller/CLPickerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | #import "CLPickerToolView.h" 11 | #import "CLPickerView.h" 12 | 13 | @interface CLPickerController : CLViewController 14 | 15 | /** 16 | 只读的UIPickerView 17 | */ 18 | @property (nonatomic, strong, readonly) CLPickerView *cl_pickerView; 19 | 20 | /** 21 | 只读的CLPickerToolView 22 | */ 23 | @property (nonatomic, strong, readonly) CLPickerToolView *cl_pickerToolView; 24 | 25 | /** 26 | 是否展示CLPickerToolView, Default: NO 27 | */ 28 | @property (nonatomic, assign) BOOL cl_hiddenToolView; 29 | 30 | /** 31 | UIPickerView Row Height 32 | */ 33 | @property (nonatomic, assign) CGFloat cl_pickerRowHeight; 34 | 35 | /** 36 | 初始化方法, 自带CLViewControllerTransitioningDelegate代理 37 | 如需自定义, 可自行重写UIViewController TransitioningDelegate 38 | 39 | @param height Present Height 40 | @return CLPickerController 41 | */ 42 | - (instancetype)initPickerControllerWithHeight:(CGFloat)height; 43 | 44 | /** 45 | 设置UIPickerView的Delegate&DataSource 46 | 47 | @param delegate id 48 | @param dataSource id 49 | */ 50 | - (void)cl_setPickerViewDelegate:(id)delegate 51 | dataSource:(id)dataSource; 52 | 53 | @end 54 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerDataSource/CLPickerDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CLPickerViewModel.h" 12 | 13 | @interface CLPickerDataSource : NSObject 14 | 15 | /** 16 | 只读的CLPickerViewModel 17 | */ 18 | @property (nonatomic, weak, readonly) CLPickerViewModel *cl_viewModel; 19 | 20 | /** 21 | 初始化方法 22 | 23 | @param viewModel CLPickerViewModel 24 | @return CLPickerDataSource 25 | */ 26 | - (instancetype)initPickerDataSourceWithViewModel:(CLPickerViewModel *)viewModel; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerDataSource/CLPickerDataSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerDataSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerDataSource.h" 10 | 11 | @interface CLPickerDataSource () 12 | 13 | @property (nonatomic, weak, readwrite) CLPickerViewModel *cl_viewModel; 14 | 15 | @end 16 | 17 | @implementation CLPickerDataSource 18 | 19 | - (instancetype)initPickerDataSourceWithViewModel:(CLPickerViewModel *)viewModel { 20 | 21 | self = [super init]; 22 | 23 | if (self) { 24 | 25 | self.cl_viewModel = viewModel; 26 | } 27 | 28 | return self; 29 | } 30 | 31 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 32 | 33 | return 1; 34 | } 35 | 36 | - (NSInteger)pickerView:(UIPickerView *)pickerView 37 | numberOfRowsInComponent:(NSInteger)component { 38 | 39 | return self.cl_viewModel.cl_dataSource.count; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerDelegate/CLPickerDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "CLPickerViewModel.h" 12 | 13 | @interface CLPickerDelegate : NSObject 14 | 15 | /** 16 | 只读CLPickerViewModel 17 | */ 18 | @property (nonatomic, weak, readonly) CLPickerViewModel *cl_viewModel; 19 | 20 | /** 21 | 初始化方法 22 | 23 | @param viewModel CLPickerViewModel 24 | @return CLPickerDelegate 25 | */ 26 | - (instancetype)initPickerDelegateWithViewModel:(CLPickerViewModel *)viewModel; 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerDelegate/CLPickerDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerDelegate.h" 10 | 11 | @interface CLPickerDelegate () 12 | 13 | @property (nonatomic, weak) CLPickerViewModel *cl_viewModel; 14 | 15 | @end 16 | 17 | @implementation CLPickerDelegate 18 | 19 | - (instancetype)initPickerDelegateWithViewModel:(CLPickerViewModel *)viewModel { 20 | 21 | self = [super init]; 22 | 23 | if (self) { 24 | 25 | self.cl_viewModel = viewModel; 26 | } 27 | 28 | return self; 29 | } 30 | 31 | - (CGFloat)pickerView:(UIPickerView *)pickerView 32 | rowHeightForComponent:(NSInteger)component { 33 | 34 | return self.cl_viewModel.cl_pickerController.cl_pickerRowHeight; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerTransitioningDelegate/CLPickerTransitioningDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerTransitioningDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewControllerTransitioningDelegate.h" 10 | 11 | @interface CLPickerTransitioningDelegate : CLViewControllerTransitioningDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerTransitioningDelegate/CLPickerTransitioningDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerTransitioningDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerTransitioningDelegate.h" 10 | #import "CLPresentationController.h" 11 | 12 | @implementation CLPickerTransitioningDelegate 13 | 14 | - (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented 15 | presentingViewController:(UIViewController *)presenting 16 | sourceViewController:(UIViewController *)source { 17 | 18 | CLPresentationController *cl_presentationController = [[CLPresentationController alloc] initWithPresentedViewController:presented 19 | presentingViewController:presenting]; 20 | 21 | return cl_presentationController; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerViewModel/CLPickerViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CLPickerController.h" 11 | 12 | @interface CLPickerViewModel : NSObject 13 | 14 | /** 15 | 数据源 16 | */ 17 | @property (nonatomic, strong) NSMutableArray *cl_dataSource; 18 | 19 | /** 20 | 只读的CLPickerController 21 | */ 22 | @property (nonatomic, weak, readonly) CLPickerController *cl_pickerController; 23 | 24 | /** 25 | 初始化方法 26 | 27 | @param controller CLPickerController 28 | @return CLPickerViewModel 29 | */ 30 | - (instancetype)initPickerViewModelWithController:(CLPickerController *)controller; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/ViewModels/CLPickerViewModel/CLPickerViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerViewModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerViewModel.h" 10 | 11 | @interface CLPickerViewModel () 12 | 13 | @property (nonatomic, weak, readwrite) CLPickerController *cl_pickerController; 14 | 15 | @end 16 | 17 | @implementation CLPickerViewModel 18 | 19 | 20 | - (instancetype)initPickerViewModelWithController:(CLPickerController *)controller { 21 | 22 | self = [super init]; 23 | 24 | if (self) { 25 | 26 | self.cl_pickerController = controller; 27 | } 28 | 29 | return self; 30 | } 31 | 32 | - (NSMutableArray *)cl_dataSource { 33 | 34 | if (!_cl_dataSource) { 35 | 36 | _cl_dataSource = [NSMutableArray array]; 37 | } 38 | 39 | return _cl_dataSource; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/Views/CLPickerToolView/CLPickerToolView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerToolView.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CLPickerToolView : UIView 12 | 13 | @property (nonatomic, strong, readonly) UIButton *cl_cancelButton; 14 | @property (nonatomic, strong, readonly) UIButton *cl_defineButton; 15 | 16 | @property (nonatomic, strong, readonly) UILabel *es_titleLabel; 17 | 18 | @property (nonatomic, copy) void(^cl_pickerToolViewDefineActionBlock)(void); 19 | @property (nonatomic, copy) void(^cl_pickerToolViewCancelActionBlock)(void); 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /CLUIKit/CLPickerController/Views/CLPickerView/CLPickerView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLPickerView.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CLPickerView : UIPickerView 12 | 13 | @property (nonatomic, strong) UIColor *cl_selectionColor; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CLUIKit/CLScanQRCode/Views/CLScanQRCodeView.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScanQRCodeView.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/2/21. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | @interface CLScanQRCodeView : UIView 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/Controller/CLScrollViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewController.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLViewController.h" 17 | 18 | NS_ASSUME_NONNULL_BEGIN 19 | @interface CLScrollViewController : CLViewController 20 | 21 | /** 22 | 获取UIScrollView, 只读 23 | */ 24 | @property (nonatomic, strong, readonly) UIScrollView *cl_scrollView; 25 | 26 | /** 27 | 设置UIScrollViewDelegate 28 | 29 | @param delegate id 30 | */ 31 | - (void)cl_setScrollViewDelegate:(_Nullable id )delegate; 32 | 33 | /** 34 | 隐藏ScrollView的Indicator 35 | */ 36 | - (void)cl_hiddenScrollIndicator; 37 | 38 | @end 39 | NS_ASSUME_NONNULL_END 40 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/Controller/CLScrollViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewController.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLScrollViewController.h" 17 | 18 | @interface CLScrollViewController () 19 | 20 | @property (nonatomic, strong, readwrite) UIScrollView *cl_scrollView; 21 | 22 | @end 23 | 24 | @implementation CLScrollViewController 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | 29 | [self.view addSubview:self.cl_scrollView]; 30 | } 31 | 32 | - (void)cl_setScrollViewDelegate:(id)delegate { 33 | 34 | self.cl_scrollView.delegate = delegate; 35 | } 36 | 37 | - (void)cl_hiddenScrollIndicator { 38 | 39 | self.cl_scrollView.showsVerticalScrollIndicator = NO; 40 | self.cl_scrollView.showsHorizontalScrollIndicator = NO; 41 | } 42 | 43 | - (UIScrollView *)cl_scrollView { 44 | 45 | if (!_cl_scrollView) { 46 | 47 | _cl_scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; 48 | 49 | _cl_scrollView.backgroundColor = [UIColor whiteColor]; 50 | } 51 | 52 | return _cl_scrollView; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/ViewModels/CLScrollViewDelegate/CLScrollViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLScrollViewViewModel.h" 18 | 19 | @interface CLScrollViewDelegate : NSObject 20 | 21 | /** 22 | 只读的CLScrollViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLScrollViewViewModel *cl_scrollViewViewModel; 25 | 26 | /** 27 | 初始化CLScrollViewDelegate 28 | 29 | @param viewModel CLScrollViewViewModel 30 | @return self CLScrollViewDelegate 31 | */ 32 | - (instancetype)initScrollViewDelegateWithViewModel:(CLScrollViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/ViewModels/CLScrollViewDelegate/CLScrollViewDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLScrollViewDelegate.h" 17 | 18 | @interface CLScrollViewDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLScrollViewViewModel *cl_scrollViewViewModel; 21 | 22 | @end 23 | 24 | @implementation CLScrollViewDelegate 25 | 26 | - (instancetype)initScrollViewDelegateWithViewModel:(CLScrollViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_scrollViewViewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/ViewModels/CLScrollViewViewModel/CLScrollViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewViewModel.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | #import "CLScrollViewController.h" 19 | 20 | @interface CLScrollViewViewModel : NSObject 21 | 22 | /** 23 | 只读的CLScrollViewController 24 | */ 25 | @property (nonatomic, weak, readonly) CLScrollViewController *cl_scrollViewController; 26 | 27 | /** 28 | 初始化CLScrollViewViewModel 29 | 30 | @param controller CLScrollViewController 31 | @return self CLScrollViewViewModel 32 | */ 33 | - (instancetype)initScrollViewDelegateWithController:(CLScrollViewController *)controller; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CLUIKit/CLScrollViewController/ViewModels/CLScrollViewViewModel/CLScrollViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLScrollViewViewModel.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/4/28. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLScrollViewViewModel.h" 17 | 18 | @interface CLScrollViewViewModel () 19 | 20 | @property (nonatomic, weak, readwrite) CLScrollViewController *cl_scrollViewController; 21 | 22 | @end 23 | 24 | @implementation CLScrollViewViewModel 25 | 26 | - (instancetype)initScrollViewDelegateWithController:(CLScrollViewController *)controller { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_scrollViewController = controller; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDataSource/CLTableViewDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDataSource.h 10 | // 11 | // Created by Cain on 2017/7/12. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import "CLTableViewViewModel.h" 17 | 18 | @interface CLTableViewDataSource : NSObject 19 | 20 | /** 21 | 只读的CLTableViewViewModel 22 | */ 23 | @property (nonatomic, weak, readonly) CLTableViewViewModel *cl_viewModel; 24 | 25 | /** 26 | 初始化CLTableViewDataSource 27 | 28 | @param viewModel CLTableViewViewModel 29 | @return self 30 | */ 31 | - (instancetype)initTableViewDataSourceWithViewModel:(CLTableViewViewModel *)viewModel; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDelegate/CLTableViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDelegate.h 10 | // 11 | // Created by Cain on 2016/11/30. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import 17 | #import "CLTableViewViewModel.h" 18 | 19 | @interface CLTableViewDelegate : NSObject 20 | 21 | /** 22 | 只读的CLTableViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLTableViewViewModel *cl_viewModel; 25 | 26 | /** 27 | 初始化CLTableViewDelegate 28 | 29 | @param viewModel CLTableViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initTableViewDelegateWithViewModel:(CLTableViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDelegate/CLTableViewDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDelegate.m 10 | // 11 | // Created by Cain on 2016/11/30. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import "CLTableViewDelegate.h" 16 | 17 | @interface CLTableViewDelegate () 18 | 19 | @property (nonatomic, weak, readwrite) CLTableViewViewModel *cl_viewModel; 20 | 21 | @end 22 | 23 | @implementation CLTableViewDelegate 24 | 25 | - (instancetype)initTableViewDelegateWithViewModel:(CLTableViewViewModel *)viewModel { 26 | 27 | self = [super init]; 28 | 29 | if (self) { 30 | 31 | self.cl_viewModel = viewModel; 32 | } 33 | 34 | return self; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDragDelegate/CLTableViewDragDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDragDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLTableViewViewModel.h" 18 | 19 | @interface CLTableViewDragDelegate : NSObject 20 | 21 | /** 22 | 只读的CLTableViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLTableViewViewModel *cl_viewModel; 25 | 26 | /** 27 | 初始化CLTableViewDragDelegate 28 | 29 | @param viewModel CLTableViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initTableViewDragDelegateWithViewModel:(CLTableViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDragDelegate/CLTableViewDragDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDragDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLTableViewDragDelegate.h" 17 | 18 | @interface CLTableViewDragDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLTableViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLTableViewDragDelegate 25 | 26 | - (instancetype)initTableViewDragDelegateWithViewModel:(CLTableViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (nonnull NSArray *)tableView:(nonnull UITableView *)tableView 39 | itemsForBeginningDragSession:(nonnull id)session 40 | atIndexPath:(nonnull NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) { 41 | 42 | return nil; 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDropDelegate/CLTableViewDropDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDropDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLTableViewViewModel.h" 18 | 19 | @interface CLTableViewDropDelegate : NSObject 20 | 21 | /** 22 | 只读的CLTableViewViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLTableViewViewModel *cl_viewModel; 25 | 26 | /** 27 | 初始化CLTableViewDragDelegate 28 | 29 | @param viewModel CLTableViewViewModel 30 | @return self 31 | */ 32 | - (instancetype)initTableViewDropDelegateWithViewModel:(CLTableViewViewModel *)viewModel; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewDropDelegate/CLTableViewDropDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewDropDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/3/30. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLTableViewDropDelegate.h" 17 | 18 | @interface CLTableViewDropDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLTableViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLTableViewDropDelegate 25 | 26 | - (instancetype)initTableViewDropDelegateWithViewModel:(CLTableViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (void)tableView:(nonnull UITableView *)tableView 39 | performDropWithCoordinator:(nonnull id)coordinator API_AVAILABLE(ios(11.0)) { 40 | 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /CLUIKit/CLTableViewController/ViewModels/CLTableViewViewModel/CLTableViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTableViewBaseModel.h 10 | // 11 | // Created by Cain on 2016/11/30. 12 | // Copyright © 2016年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | #import "CLTableViewController.h" 17 | 18 | @interface CLTableViewViewModel : NSObject 19 | 20 | /** 21 | 数据源NSArray 22 | */ 23 | @property (nonatomic, strong, readonly) NSMutableArray *cl_dataSource; 24 | 25 | /** 26 | 只读的CLTableViewController 27 | */ 28 | @property (nonatomic, weak, readonly) CLTableViewController *cl_tableViewController; 29 | 30 | /** 31 | 初始化CLTableViewViewModel 32 | 33 | @param viewController CLTableViewController 34 | @return self 35 | */ 36 | - (instancetype)initTableViewBaseModelWithController:(CLTableViewController *)viewController; 37 | 38 | /** 39 | 通过HTTP请求数据 40 | */ 41 | - (void)cl_tableViewHTTPRequest; 42 | 43 | /** 44 | 配置TableView每一条Cell所显示的分割线 45 | */ 46 | - (void)cl_showTableViewSeparatorLine; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /CLUIKit/CLTextField/CLTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLTextField.h 10 | // CLUIKit 11 | // 12 | // Created by Cain on 2017/9/20. 13 | // Copyright © 2017年 Cain. All rights reserved. 14 | // 15 | 16 | #import 17 | 18 | typedef NS_ENUM(NSInteger, CLTextFieldType) { 19 | 20 | CLTextFieldBottomNormal = 0, // default 21 | CLTextFieldBottomLineType 22 | }; 23 | 24 | @interface CLTextField : UITextField 25 | 26 | /** 27 | CLTextFieldType, 默认为CLTextFieldBottomNormal 28 | */ 29 | @property (nonatomic, assign) CLTextFieldType cl_textFieldType; 30 | 31 | /** 32 | CLTextField下划线的颜色, 只有在CLTextFieldBottomLineType下才会生效 33 | */ 34 | @property (nonatomic, strong) UIColor *cl_lineColor; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/Controller/CLViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewController.h 10 | // 11 | // Created by Cain on 2017/7/12. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | typedef NS_ENUM(NSInteger, CLViewControllerType) { 19 | 20 | CLViewControllerTypeMain = 0, // Default 21 | CLViewControllerTypeChild 22 | }; 23 | 24 | @interface CLViewController : UIViewController 25 | 26 | /** 27 | 初始化CLViewController, 默认为CLViewControllerTypeMain 28 | 29 | @param type CLViewControllerStyle 30 | @return self 31 | */ 32 | - (instancetype)initViewControllerWithType:(CLViewControllerType)type; 33 | 34 | /** 35 | 初始化CLViewController, 并输入指定的UIViewControllerTransitioningDelegate代理 36 | 37 | @param delegate id 38 | @return CLViewController 39 | */ 40 | - (instancetype)initViewControllerWithTransitioningDelegate:(id)delegate; 41 | 42 | @end 43 | NS_ASSUME_NONNULL_END 44 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/Controller/CLViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewController.m 10 | // 11 | // Created by Cain on 2017/7/12. 12 | // Copyright © 2017年 Cain Luo. All rights reserved. 13 | // 14 | 15 | #import "CLViewController.h" 16 | 17 | @interface CLViewController () 18 | 19 | @end 20 | 21 | @implementation CLViewController 22 | 23 | - (instancetype)initViewControllerWithType:(CLViewControllerType)type { 24 | 25 | self = [super init]; 26 | 27 | if (self) { 28 | 29 | if (type == CLViewControllerTypeChild) { 30 | 31 | self.hidesBottomBarWhenPushed = YES; 32 | } 33 | } 34 | 35 | return self; 36 | } 37 | 38 | - (instancetype)initViewControllerWithTransitioningDelegate:(id)delegate { 39 | 40 | self = [super init]; 41 | 42 | if (self) { 43 | 44 | self.transitioningDelegate = delegate; 45 | } 46 | 47 | return self; 48 | } 49 | 50 | - (void)viewDidLoad { 51 | [super viewDidLoad]; 52 | 53 | self.view.backgroundColor = [UIColor whiteColor]; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/ViewModels/CLViewControllerTransitioningDelegate/CLViewControllerTransitioningDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewControllerTransitioningDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/6/26. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLViewControllerViewModel.h" 18 | 19 | @interface CLViewControllerTransitioningDelegate : NSObject 20 | 21 | /** 22 | 只读的CLViewControllerViewModel 23 | */ 24 | @property (nonatomic, weak, readonly) CLViewController *cl_controller; 25 | 26 | /** 27 | 初始化CLViewControllerTransitioningDelegate 28 | 29 | @param controller CLViewController 30 | @return CLViewControllerTransitioningDelegate 31 | */ 32 | - (instancetype)initViewControllerTransitioningDelegateWithController:(CLViewController *)controller; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/ViewModels/CLViewControllerTransitioningDelegate/CLViewControllerTransitioningDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewControllerTransitioningDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/6/26. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLViewControllerTransitioningDelegate.h" 17 | 18 | @interface CLViewControllerTransitioningDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLViewController *cl_controller; 21 | 22 | @end 23 | 24 | @implementation CLViewControllerTransitioningDelegate 25 | 26 | - (instancetype)initViewControllerTransitioningDelegateWithController:(CLViewController *)controller { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_controller = controller; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/ViewModels/CLViewControllerViewModel/CLViewControllerViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewControllerViewModel.h 10 | // SimpleProject 11 | // 12 | // Created by Cain on 2017/8/29. 13 | // Copyright © 2017年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLViewController.h" 18 | 19 | @interface CLViewControllerViewModel : NSObject 20 | 21 | /** 22 | 只读的CLViewController 23 | */ 24 | @property (nonatomic, weak, readonly) CLViewController *cl_viewController; 25 | 26 | /** 27 | 初始化CLViewControllerViewModel 28 | 29 | @param controller CLViewController 30 | @return self 31 | */ 32 | - (instancetype)initViewControllerViewModelWithController:(CLViewController *)controller; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLViewController/ViewModels/CLViewControllerViewModel/CLViewControllerViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLViewControllerViewModel.m 10 | // SimpleProject 11 | // 12 | // Created by Cain on 2017/8/29. 13 | // Copyright © 2017年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLViewControllerViewModel.h" 17 | 18 | @interface CLViewControllerViewModel () 19 | 20 | @property (nonatomic, weak, readwrite) CLViewController *cl_viewController; 21 | 22 | @end 23 | 24 | @implementation CLViewControllerViewModel 25 | 26 | - (instancetype)initViewControllerViewModelWithController:(CLViewController *)controller { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewController = controller; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/Controller/CLWebViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewController.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLViewController.h" 17 | #import 18 | 19 | NS_ASSUME_NONNULL_BEGIN 20 | @interface CLWebViewController : CLViewController 21 | 22 | /** 23 | 只读的WKWebView 24 | */ 25 | @property (nonatomic, strong, readonly) WKWebView *cl_webView; 26 | 27 | /** 28 | 设置WKWebView的WKUIDelegate于WKNavigationDelegate 29 | 30 | @param UIDelegate WKUIDelegate 31 | @param navigationDelegate WKNavigationDelegate 32 | */ 33 | - (void)cl_setWebViewUIDelegate:(_Nullable id )UIDelegate 34 | navigationDelegate:(_Nullable id )navigationDelegate; 35 | 36 | 37 | @end 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/Controller/CLWebViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewController.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLWebViewController.h" 17 | 18 | @interface CLWebViewController () 19 | 20 | @property (nonatomic, strong, readwrite) WKWebView *cl_webView; 21 | 22 | @end 23 | 24 | @implementation CLWebViewController 25 | 26 | - (void)viewDidLoad { 27 | [super viewDidLoad]; 28 | 29 | [self.view addSubview:self.cl_webView]; 30 | } 31 | 32 | - (void)cl_setWebViewUIDelegate:(id)UIDelegate 33 | navigationDelegate:(id)navigationDelegate { 34 | 35 | self.cl_webView.UIDelegate = UIDelegate; 36 | self.cl_webView.navigationDelegate = navigationDelegate; 37 | } 38 | 39 | - (WKWebView *)cl_webView { 40 | 41 | if (!_cl_webView) { 42 | 43 | _cl_webView = [[WKWebView alloc] initWithFrame:self.view.bounds]; 44 | } 45 | 46 | return _cl_webView; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewNavigationDelegate/CLWebViewNavigationDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewNavigationDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import 18 | #import "CLWebViewViewModel.h" 19 | 20 | @interface CLWebViewNavigationDelegate : NSObject 21 | 22 | /** 23 | 只读的CLWebViewViewModel 24 | */ 25 | @property (nonatomic, weak, readonly) CLWebViewViewModel *cl_viewModel; 26 | 27 | /** 28 | 初始化CLWebViewNavigationDelegate 29 | 30 | @param viewModel CLWebViewViewModel 31 | @return CLWebViewNavigationDelegate 32 | */ 33 | - (instancetype)initWebViewNavigationDelegateWithViewModel:(CLWebViewViewModel *)viewModel; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewNavigationDelegate/CLWebViewNavigationDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewNavigationDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLWebViewNavigationDelegate.h" 17 | 18 | @interface CLWebViewNavigationDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLWebViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLWebViewNavigationDelegate 25 | 26 | - (instancetype)initWebViewNavigationDelegateWithViewModel:(CLWebViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewUIDelegate/CLWebViewUIDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewUIDelegate.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import 18 | #import "CLWebViewViewModel.h" 19 | 20 | @interface CLWebViewUIDelegate : NSObject 21 | 22 | /** 23 | 只读的CLWebViewViewModel 24 | */ 25 | @property (nonatomic, weak, readonly) CLWebViewViewModel *cl_viewModel; 26 | 27 | /** 28 | 初始化CLWebViewUIDelegate 29 | 30 | @param viewModel CLWebViewViewModel 31 | @return CLWebViewUIDelegate 32 | */ 33 | - (instancetype)initWebViewUIDelegateWithViewModel:(CLWebViewViewModel *)viewModel; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewUIDelegate/CLWebViewUIDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewUIDelegate.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLWebViewUIDelegate.h" 17 | 18 | @interface CLWebViewUIDelegate () 19 | 20 | @property (nonatomic, weak, readwrite) CLWebViewViewModel *cl_viewModel; 21 | 22 | @end 23 | 24 | @implementation CLWebViewUIDelegate 25 | 26 | - (instancetype)initWebViewUIDelegateWithViewModel:(CLWebViewViewModel *)viewModel { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_viewModel = viewModel; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewViewModel/CLWebViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewViewModel.h 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import 17 | #import "CLWebViewController.h" 18 | 19 | @interface CLWebViewViewModel : NSObject 20 | 21 | /** 22 | 只读的CLWebViewController 23 | */ 24 | @property (nonatomic, weak, readonly) CLWebViewController *cl_webViewController; 25 | 26 | /** 27 | 初始化CLWebViewViewModel 28 | 29 | @param controller CLWebViewController 30 | @return CLWebViewViewModel 31 | */ 32 | - (instancetype)initWebViewModelWithController:(CLWebViewController *)controller; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /CLUIKit/CLWebViewController/ViewModels/CLWebViewViewModel/CLWebViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // CLWebViewViewModel.m 10 | // CLUIKitExample 11 | // 12 | // Created by Cain Luo on 2018/5/23. 13 | // Copyright © 2018年 Cain Luo. All rights reserved. 14 | // 15 | 16 | #import "CLWebViewViewModel.h" 17 | 18 | @interface CLWebViewViewModel () 19 | 20 | @property (nonatomic, weak, readwrite) CLWebViewController *cl_webViewController; 21 | 22 | @end 23 | 24 | @implementation CLWebViewViewModel 25 | 26 | - (instancetype)initWebViewModelWithController:(CLWebViewController *)controller { 27 | 28 | self = [super init]; 29 | 30 | if (self) { 31 | 32 | self.cl_webViewController = controller; 33 | } 34 | 35 | return self; 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/AppDelegate/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Base/EXBaseViewController/EXBaseViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXBaseViewController.h 3 | // CLFoundationExample 4 | // 5 | // Created by Cain Luo on 2018/2/14. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface EXBaseViewController : UIViewController 12 | 13 | @property (nonatomic, strong, readonly) UITextView *ex_textView; 14 | 15 | @property (nonatomic, strong) NSMutableString *ex_textViewString; 16 | 17 | - (void)ex_reloadTextView; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Base/EXBaseViewController/EXBaseViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXBaseViewController.m 3 | // CLFoundationExample 4 | // 5 | // Created by Cain Luo on 2018/2/14. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXBaseViewController.h" 10 | 11 | @interface EXBaseViewController () 12 | 13 | @property (nonatomic, strong, readwrite) UITextView *ex_textView; 14 | 15 | @end 16 | 17 | @implementation EXBaseViewController 18 | 19 | - (void)viewDidLoad { 20 | [super viewDidLoad]; 21 | 22 | self.view.backgroundColor = [UIColor whiteColor]; 23 | 24 | [self.view addSubview:self.ex_textView]; 25 | } 26 | 27 | - (UITextView *)ex_textView { 28 | 29 | CL_GET_METHOD_RETURN_OBJC(_ex_textView); 30 | 31 | _ex_textView = [[UITextView alloc] initWithFrame:self.view.frame]; 32 | 33 | _ex_textView.font = [UIFont systemFontOfSize:15]; 34 | 35 | return _ex_textView; 36 | } 37 | 38 | - (NSMutableString *)ex_textViewString { 39 | 40 | CL_GET_METHOD_RETURN_OBJC(_ex_textViewString); 41 | 42 | _ex_textViewString = [[NSMutableString alloc] init]; 43 | 44 | return _ex_textViewString; 45 | } 46 | 47 | - (void)ex_reloadTextView { 48 | 49 | self.ex_textView.text = self.ex_textViewString; 50 | } 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Base/UIViewController+EXViewController/UIViewController+EXViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+EXViewController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIViewController (EXViewController) 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Base/UIViewController+EXViewController/UIViewController+EXViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+EXViewController.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "UIViewController+EXViewController.h" 10 | 11 | @implementation UIViewController (EXViewController) 12 | 13 | - (void)dealloc { 14 | NSLog(@"释放了: %@", NSStringFromClass(self.class)); 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/Controller/AlertController.m: -------------------------------------------------------------------------------- 1 | // 2 | // CLAlertController.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLAlertController.h" 10 | 11 | @interface CLAlertController () 12 | 13 | @end 14 | 15 | @implementation CLAlertController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/Controller/EXAlertController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewController.h" 10 | 11 | @interface EXAlertController : CLTableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/Models/EXAlertBaseModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertBaseModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef NS_ENUM(NSInteger, EXAlertType) { 12 | 13 | EXAlertTypePhone = 0, 14 | EXAlertTypeAlert, 15 | EXAlertTypeAlertSheet, 16 | EXAlertTypeCustom, 17 | EXAlertTypeCustomTitles, 18 | EXAlertTypeCategoryAlert, 19 | EXAlertTypeCategorySheet, 20 | EXAlertTypeCategoryCustom, 21 | }; 22 | 23 | @interface EXAlertBaseModel : NSObject 24 | 25 | @property (nonatomic, copy) NSString *title; 26 | 27 | @property (nonatomic, assign) EXAlertType alertType; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/Models/EXAlertBaseModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertBaseModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXAlertBaseModel.h" 10 | 11 | @implementation EXAlertBaseModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertDataSource/CLAlertDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDataSource.h" 10 | 11 | @interface EXAlertDataSource : CLTableViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertDataSource/EXAlertDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDataSource.h" 10 | 11 | @interface EXAlertDataSource : CLTableViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertDataSource/EXAlertDataSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertDataSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXAlertDataSource.h" 10 | #import "EXAlertBaseModel.h" 11 | 12 | @implementation EXAlertDataSource 13 | 14 | - (UITableViewCell *)tableView:(UITableView *)tableView 15 | cellForRowAtIndexPath:(NSIndexPath *)indexPath { 16 | 17 | EXAlertBaseModel *ex_aertBaseModel = self.cl_viewModel.cl_dataSource[indexPath.row]; 18 | 19 | UITableViewCell *ex_tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 20 | 21 | if (!ex_tableViewCell) { 22 | 23 | ex_tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 24 | reuseIdentifier:@"UITableViewCell"]; 25 | } 26 | 27 | ex_tableViewCell.textLabel.text = ex_aertBaseModel.title; 28 | 29 | return ex_tableViewCell; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertDelegate/CLAlertDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDelegate.h" 10 | 11 | @interface EXAlertDelegate : CLTableViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertDelegate/EXAlertDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDelegate.h" 10 | 11 | @interface EXAlertDelegate : CLTableViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAlert/ViewModels/EXAlertViewModel/EXAlertViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAlertViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewViewModel.h" 10 | 11 | @interface EXAlertViewModel : CLTableViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXAnimator/EXAnimatorController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXAnimatorController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/24. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXBaseViewController.h" 10 | 11 | @interface EXAnimatorController : EXBaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXApplication/EXApplicationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXApplicationController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/3/5. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXBaseViewController.h" 10 | 11 | @interface EXApplicationController : EXBaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXBarButtonItem/EXBarButtonItemController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXBarButtonItemController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXBaseViewController.h" 10 | 11 | @interface EXBarButtonItemController : EXBaseViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXButton/EXButtonController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXButtonController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXButtonController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/Controller/EXCollectionViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLCollectionViewController.h" 10 | 11 | @interface EXCollectionViewController : CLCollectionViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/ViewModels/EXCollectionViewDataSource/EXCollectionViewDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLCollectionViewDataSource.h" 10 | 11 | @interface EXCollectionViewDataSource : CLCollectionViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/ViewModels/EXCollectionViewDelegate/EXCollectionViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLCollectionViewDelegate.h" 10 | 11 | @interface EXCollectionViewDelegate : CLCollectionViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/ViewModels/EXCollectionViewDelegate/EXCollectionViewDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXCollectionViewDelegate.h" 10 | 11 | @implementation EXCollectionViewDelegate 12 | 13 | - (void)collectionView:(UICollectionView *)collectionView 14 | didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 15 | 16 | NSLog(@"点击了第%ld条Cell", (long)indexPath.row); 17 | 18 | [self.cl_viewModel.cl_collectionViewController.navigationController cl_popToViewControllerWithLevel:0 19 | animated:YES]; 20 | } 21 | 22 | - (UIView *)cl_placeholderView { 23 | 24 | UIView *cl_placeholderView = [[UIView alloc] init]; 25 | 26 | cl_placeholderView.backgroundColor = [UIColor cl_getARC4RandomColor]; 27 | 28 | return cl_placeholderView; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/ViewModels/EXCollectionViewViewModel/EXCollectionViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLCollectionViewViewModel.h" 10 | 11 | @interface EXCollectionViewViewModel : CLCollectionViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXCollection/ViewModels/EXCollectionViewViewModel/EXCollectionViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXCollectionViewViewModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXCollectionViewViewModel.h" 10 | 11 | @implementation EXCollectionViewViewModel 12 | 13 | - (void)cl_collectionViewHTTPRequest { 14 | 15 | if (self.cl_dataSource.count) { 16 | 17 | [self.cl_dataSource removeAllObjects]; 18 | 19 | [self.cl_collectionViewController.cl_collectionView cl_reloadData]; 20 | 21 | [self.cl_collectionViewController cl_dropDownEndRefresh]; 22 | [self.cl_collectionViewController cl_pullUpEndRefresh]; 23 | 24 | } else { 25 | 26 | for (NSInteger i = 0; i < 10; i++) { 27 | 28 | [self.cl_dataSource addObject:[NSString stringWithFormat:@"%ld", (long)i]]; 29 | } 30 | 31 | [self.cl_collectionViewController.cl_collectionView cl_reloadData]; 32 | 33 | [self.cl_collectionViewController cl_dropDownEndRefresh]; 34 | [self.cl_collectionViewController cl_pullUpEndRefresh]; 35 | } 36 | } 37 | 38 | @end 39 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXColor/EXColorController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXColorController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXColorController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXDevice/EXDeviceController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXDeviceController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXDeviceController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/Controller/EXFontController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXFontController : CLTableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/Models/EXFontBaseModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontBaseModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface EXFontBaseModel : NSObject 12 | 13 | @property (nonatomic, copy) NSString *title; 14 | 15 | @property (nonatomic, strong) UIFont *font; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/Models/EXFontBaseModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontBaseModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXFontBaseModel.h" 10 | 11 | @implementation EXFontBaseModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/ViewModels/EXFontDateSource/EXFontDateSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontDateSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDataSource.h" 10 | 11 | @interface EXFontDateSource : CLTableViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/ViewModels/EXFontDateSource/EXFontDateSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontDateSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXFontDateSource.h" 10 | #import "EXFontBaseModel.h" 11 | 12 | @implementation EXFontDateSource 13 | 14 | - (UITableViewCell *)tableView:(UITableView *)tableView 15 | cellForRowAtIndexPath:(NSIndexPath *)indexPath { 16 | 17 | EXFontBaseModel *ex_fontBaseModel = self.cl_viewModel.cl_dataSource[indexPath.row]; 18 | 19 | UITableViewCell *ex_tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 20 | 21 | if (!ex_tableViewCell) { 22 | 23 | ex_tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 24 | reuseIdentifier:@"UITableViewCell"]; 25 | } 26 | 27 | ex_tableViewCell.textLabel.text = ex_fontBaseModel.title; 28 | ex_tableViewCell.textLabel.font = ex_fontBaseModel.font; 29 | 30 | return ex_tableViewCell; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/ViewModels/EXFontDelegate/EXFontDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDelegate.h" 10 | 11 | @interface EXFontDelegate : CLTableViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/ViewModels/EXFontDelegate/EXFontDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXFontDelegate.h" 10 | #import "EXFontBaseModel.h" 11 | 12 | @implementation EXFontDelegate 13 | 14 | - (void)tableView:(UITableView *)tableView 15 | didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 16 | [tableView deselectRowAtIndexPath:indexPath 17 | animated:YES]; 18 | 19 | EXFontBaseModel *ex_fontBaseModel = self.cl_viewModel.cl_dataSource[indexPath.row]; 20 | 21 | NSLog(@"点击了%@, Font为:%@", ex_fontBaseModel.title, ex_fontBaseModel.font); 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXFont/ViewModels/EXFontViewModel/EXFontViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXFontViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewViewModel.h" 10 | 11 | @interface EXFontViewModel : CLTableViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXImage/EXImageController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXImageController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXImageController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXLabel/EXLabelController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXLabelController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2019/1/7. 6 | // Copyright © 2019 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EXLabelController : CLViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/Controller/EXPickerController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerController.h" 10 | 11 | @interface EXPickerController : CLPickerController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerDataSource/EXPickerDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerDataSource.h" 10 | 11 | @interface EXPickerDataSource : CLPickerDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerDataSource/EXPickerDataSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerDataSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXPickerDataSource.h" 10 | 11 | @implementation EXPickerDataSource 12 | 13 | - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 14 | return 5; 15 | } 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerDelegate/EXPickerDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerDelegate.h" 10 | 11 | @interface EXPickerDelegate : CLPickerDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerDelegate/EXPickerDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXPickerDelegate.h" 10 | 11 | @implementation EXPickerDelegate 12 | 13 | - (UIView *)pickerView:(UIPickerView *)pickerView 14 | viewForRow:(NSInteger)row 15 | forComponent:(NSInteger)component 16 | reusingView:(UIView *)view { 17 | 18 | UILabel *cl_pickerLabel = [[UILabel alloc] init]; 19 | 20 | cl_pickerLabel.text = self.cl_viewModel.cl_dataSource[row]; 21 | cl_pickerLabel.textAlignment = NSTextAlignmentCenter; 22 | 23 | return cl_pickerLabel; 24 | } 25 | 26 | - (void)pickerView:(UIPickerView *)pickerView 27 | didSelectRow:(NSInteger)row 28 | inComponent:(NSInteger)component { 29 | 30 | NSLog(@"选中的Row: %ld, 选中的Component: %ld, 选中的内容: %@", row, component, self.cl_viewModel.cl_dataSource[row]); 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerViewModel/EXPickerViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLPickerViewModel.h" 10 | 11 | @interface EXPickerViewModel : CLPickerViewModel 12 | 13 | - (void)ex_pickerViewModelRequest; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPickerController/ViewModels/EXPickerViewModel/EXPickerViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXPickerViewModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/9/12. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXPickerViewModel.h" 10 | 11 | @implementation EXPickerViewModel 12 | 13 | - (void)ex_pickerViewModelRequest { 14 | 15 | for (NSInteger i = 0; i < 20; i++) { 16 | 17 | [self.cl_dataSource addObject:[NSString stringWithFormat:@"%ld", i]]; 18 | } 19 | 20 | [self.cl_pickerController.cl_pickerView reloadAllComponents]; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPresentationController/Controller/EXPresentationController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPresentationController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/6/26. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXPresentationController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPresentationController/ViewModels/EXPresentationTransitioningDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXPresentationTransitioningDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/7/3. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewControllerTransitioningDelegate.h" 10 | 11 | @interface EXPresentationTransitioningDelegate : CLViewControllerTransitioningDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXPresentationController/ViewModels/EXPresentationTransitioningDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXPresentationTransitioningDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/7/3. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXPresentationTransitioningDelegate.h" 10 | 11 | @implementation EXPresentationTransitioningDelegate 12 | 13 | - (UIPresentationController *)presentationControllerForPresentedViewController:(UIViewController *)presented 14 | presentingViewController:(UIViewController *)presenting 15 | sourceViewController:(UIViewController *)source { 16 | 17 | CLPresentationController *cl_presentationController = [[CLPresentationController alloc] initWithPresentedViewController:presented 18 | presentingViewController:presenting]; 19 | 20 | return cl_presentationController; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/Controller/EXRootController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewController.h" 10 | 11 | @interface EXRootController : CLTableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/Models/EXRootBaseModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootBaseModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface EXRootBaseModel : NSObject 12 | 13 | @property (nonatomic, copy) NSString *title; 14 | @property (nonatomic, copy) NSString *controller; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/Models/EXRootBaseModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootBaseModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXRootBaseModel.h" 10 | 11 | @implementation EXRootBaseModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/ViewModels/EXRootDataSource/EXRootDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDataSource.h" 10 | 11 | @interface EXRootDataSource : CLTableViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/ViewModels/EXRootDataSource/EXRootDataSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootDataSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXRootDataSource.h" 10 | #import "EXRootBaseModel.h" 11 | 12 | @implementation EXRootDataSource 13 | 14 | - (UITableViewCell *)tableView:(UITableView *)tableView 15 | cellForRowAtIndexPath:(NSIndexPath *)indexPath { 16 | 17 | EXRootBaseModel *ex_rootBaseModel = self.cl_viewModel.cl_dataSource[indexPath.row]; 18 | 19 | UITableViewCell *ex_tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 20 | 21 | if (!ex_tableViewCell) { 22 | 23 | ex_tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 24 | reuseIdentifier:@"UITableViewCell"]; 25 | } 26 | 27 | ex_tableViewCell.textLabel.text = ex_rootBaseModel.title; 28 | 29 | return ex_tableViewCell; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/ViewModels/EXRootDelegate/EXRootDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDelegate.h" 10 | 11 | @interface EXRootDelegate : CLTableViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXRoot/ViewModels/EXRootViewModel/EXRootViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXRootViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewViewModel.h" 10 | 11 | @interface EXRootViewModel : CLTableViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScanQRCode/EXScanQRCodeController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXScanQRCodeController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/21. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLScanQRCodeController.h" 10 | 11 | @interface EXScanQRCodeController : CLScanQRCodeController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScanQRCode/EXScanQRCodeController.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXScanQRCodeController.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/21. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXScanQRCodeController.h" 10 | 11 | @interface EXScanQRCodeController () 12 | 13 | @end 14 | 15 | @implementation EXScanQRCodeController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | 20 | self.cl_scanQRCodeControllerDelegate = self; 21 | 22 | self.cl_autoStopCaptureSessionRunning = YES; 23 | 24 | [self cl_scanQRCodeBlock]; 25 | } 26 | 27 | #pragma mark - CLScanQRCodeBlock 28 | - (void)cl_scanQRCodeBlock { 29 | 30 | [self setCl_scanQRCodeGetMetadataObjectsBlock:^(NSArray *metadataObjects) { 31 | 32 | NSLog(@"扫描出来的结果为: %@", metadataObjects); 33 | }]; 34 | 35 | [self setCl_scanQRCodeGetMetadataStringValue:^(NSString *stringValue) { 36 | 37 | NSLog(@"扫描出来的结果为: %@", stringValue); 38 | }]; 39 | } 40 | 41 | #pragma mark - CLScanQRCodeDelegate 42 | - (void)cl_scanQRCodeGetMetadataStringValue:(NSString *)metadataObject { 43 | 44 | NSLog(@"扫描出来的结果为: %@", metadataObject); 45 | } 46 | 47 | - (void)cl_scanQRCodeGetMetadataObjectsWithMetadataObjects:(NSArray *)metadataObjects { 48 | 49 | NSLog(@"扫描出来的结果为: %@", metadataObjects); 50 | } 51 | 52 | @end 53 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScreen/EXScreenController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXScreenController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXScreenController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScrollView/Controller/EXScrollViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXScrollViewController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLScrollViewController.h" 10 | 11 | @interface EXScrollViewController : CLScrollViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScrollView/ViewModels/EXScrollViewDelegate/EXScrollViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXScrollViewDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLScrollViewDelegate.h" 10 | 11 | @interface EXScrollViewDelegate : CLScrollViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScrollView/ViewModels/EXScrollViewDelegate/EXScrollViewDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXScrollViewDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXScrollViewDelegate.h" 10 | 11 | @implementation EXScrollViewDelegate 12 | 13 | - (void)scrollViewDidScroll:(UIScrollView *)scrollView { 14 | 15 | NSLog(@"UIScrollView: %@, ViewModel: %@", scrollView, self.cl_scrollViewViewModel); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScrollView/ViewModels/EXScrollViewViewModel/EXScrollViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXScrollViewViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLScrollViewViewModel.h" 10 | 11 | @interface EXScrollViewViewModel : CLScrollViewViewModel 12 | 13 | - (void)ex_logController; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXScrollView/ViewModels/EXScrollViewViewModel/EXScrollViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXScrollViewViewModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/4/28. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXScrollViewViewModel.h" 10 | 11 | @implementation EXScrollViewViewModel 12 | 13 | - (void)ex_logController { 14 | 15 | NSLog(@"CLScrollViewController: %@", self.cl_scrollViewController); 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTableView/Controller/EXTableViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTableViewController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewController.h" 10 | 11 | @interface EXTableViewController : CLTableViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTableView/ViewModels/EXTableViewDataSource/EXTableViewDataSource.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTableViewDataSource.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDataSource.h" 10 | 11 | @interface EXTableViewDataSource : CLTableViewDataSource 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTableView/ViewModels/EXTableViewDataSource/EXTableViewDataSource.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXTableViewDataSource.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXTableViewDataSource.h" 10 | 11 | @implementation EXTableViewDataSource 12 | 13 | - (UITableViewCell *)tableView:(UITableView *)tableView 14 | cellForRowAtIndexPath:(NSIndexPath *)indexPath { 15 | 16 | UITableViewCell *cl_tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 17 | 18 | if (!cl_tableViewCell) { 19 | 20 | cl_tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 21 | reuseIdentifier:@"UITableViewCell"]; 22 | } 23 | 24 | cl_tableViewCell.textLabel.text = self.cl_viewModel.cl_dataSource[indexPath.row]; 25 | 26 | cl_tableViewCell.contentView.backgroundColor = [UIColor cl_getARC4RandomColor]; 27 | 28 | return cl_tableViewCell; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTableView/ViewModels/EXTableViewDelegate/EXTableViewDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTableViewDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewDelegate.h" 10 | 11 | @interface EXTableViewDelegate : CLTableViewDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTableView/ViewModels/EXTableViewViewModel/EXTableViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTableViewViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/19. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLTableViewViewModel.h" 10 | 11 | @interface EXTableViewViewModel : CLTableViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXTextField/EXTextFieldController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXTextFieldController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLViewController.h" 10 | 11 | @interface EXTextFieldController : CLViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/Controller/EXWebViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewController.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLWebViewController.h" 10 | 11 | @interface EXWebViewController : CLWebViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewNavigationDelegate/EXWebViewNavigationDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewNavigationDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLWebViewNavigationDelegate.h" 10 | 11 | @interface EXWebViewNavigationDelegate : CLWebViewNavigationDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewNavigationDelegate/EXWebViewNavigationDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewNavigationDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXWebViewNavigationDelegate.h" 10 | 11 | @implementation EXWebViewNavigationDelegate 12 | 13 | - (void)webView:(WKWebView *)webView 14 | didStartProvisionalNavigation:(WKNavigation *)navigation { 15 | 16 | NSLog(@"WkWebView开始加载"); 17 | } 18 | 19 | - (void)webView:(WKWebView *)webView 20 | didFinishNavigation:(WKNavigation *)navigation { 21 | 22 | NSLog(@"WkWebView加载完成"); 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewUIDelegate/EXWebViewUIDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewUIDelegate.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLWebViewUIDelegate.h" 10 | 11 | @interface EXWebViewUIDelegate : CLWebViewUIDelegate 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewUIDelegate/EXWebViewUIDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewUIDelegate.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXWebViewUIDelegate.h" 10 | 11 | @implementation EXWebViewUIDelegate 12 | 13 | - (void)webView:(WKWebView *)webView 14 | runJavaScriptAlertPanelWithMessage:(NSString *)message 15 | initiatedByFrame:(WKFrameInfo *)frame 16 | completionHandler:(void (^)(void))completionHandler { 17 | 18 | UIAlertAction *ex_alertAction = [UIAlertAction actionWithTitle:@"好的" 19 | style:UIAlertActionStyleDefault 20 | handler:^(UIAlertAction * _Nonnull action) { 21 | 22 | completionHandler(); 23 | }]; 24 | 25 | [self.cl_viewModel.cl_webViewController cl_showAlertViewControllerWithTitle:@"温馨提示" 26 | message:message 27 | actions:@[ex_alertAction] 28 | preferredStyle:UIAlertControllerStyleAlert]; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewViewModel/EXWebViewViewModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewViewModel.h 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "CLWebViewViewModel.h" 10 | 11 | @interface EXWebViewViewModel : CLWebViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Module/EXWebView/ViewModels/EXWebViewViewModel/EXWebViewViewModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EXWebViewViewModel.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/5/23. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import "EXWebViewViewModel.h" 10 | 11 | @implementation EXWebViewViewModel 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/1.imageset/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/1.imageset/1.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "1.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-20.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x-1.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-41.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-Spotlight-42.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/iCon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/AppIcon.appiconset/iCon1024.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen4.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen4.0.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen4.7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen4.7.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen5.5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen5.5.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen5.8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/LaunchImage.launchimage/Screen5.8.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_home.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tab_home@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tab_home@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_home.imageset/tab_home@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_home.imageset/tab_home@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_home.imageset/tab_home@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_home.imageset/tab_home@3x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_homeH.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "tab_homeH@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "tab_homeH@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_homeH.imageset/tab_homeH@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_homeH.imageset/tab_homeH@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_homeH.imageset/tab_homeH@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/TabBar/tab_homeH.imageset/tab_homeH@3x.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/dog.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "dog.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/dog.imageset/dog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/dog.imageset/dog.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/icon1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon1.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/icon1.imageset/icon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/icon1.imageset/icon1.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/navigationBarImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "navigationBarImage.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/navigationBarImage.imageset/navigationBarImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/Assets.xcassets/navigationBarImage.imageset/navigationBarImage.png -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/CLUIKitExample-PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // CLUIKitExample-PrefixHeader.pch 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #ifndef CLUIKitExample_PrefixHeader_pch 10 | #define CLUIKitExample_PrefixHeader_pch 11 | 12 | #import "UIViewController+EXViewController.h" 13 | 14 | #import "MJRefresh.h" 15 | #import "YYModel.h" 16 | #import "Masonry.h" 17 | 18 | #import "CLUIKit.h" 19 | #import "CLFoundation.h" 20 | 21 | #endif /* CLUIKitExample_PrefixHeader_pch */ 22 | -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/CLUIKitExample/Resource/gif.gif -------------------------------------------------------------------------------- /CLUIKitExample/CLUIKitExample/Resource/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // CLUIKitExample 4 | // 5 | // Created by Cain Luo on 2018/2/17. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CLUIKitExample/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | platform :ios, '8.0' 3 | 4 | use_frameworks! 5 | 6 | target 'CLUIKitExample' do 7 | 8 | pod 'MJRefresh' 9 | pod 'CLFoundation' 10 | pod 'YYModel' 11 | pod 'Masonry' 12 | 13 | end 14 | 15 | -------------------------------------------------------------------------------- /CLUIKitExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - CLFoundation (1.7.2): 3 | - "CLFoundation/CLFoundation+Category (= 1.7.2)" 4 | - "CLFoundation/CLFoundation+Category (1.7.2)" 5 | - Masonry (1.1.0) 6 | - MJRefresh (3.1.15.3) 7 | - YYModel (1.0.4) 8 | 9 | DEPENDENCIES: 10 | - CLFoundation 11 | - Masonry 12 | - MJRefresh 13 | - YYModel 14 | 15 | SPEC REPOS: 16 | https://github.com/cocoapods/specs.git: 17 | - CLFoundation 18 | - Masonry 19 | - MJRefresh 20 | - YYModel 21 | 22 | SPEC CHECKSUMS: 23 | CLFoundation: d329a9f578ae0654022d811f160db8ac404346c7 24 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 25 | MJRefresh: b48380ae2b927b46c4ef000de9adb8dc748e1df7 26 | YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 27 | 28 | PODFILE CHECKSUM: 7b5513fae7f1abe84a7315ea5254f70818dba6ca 29 | 30 | COCOAPODS: 1.5.3 31 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSArray+CLArray/NSArray+CLArray.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+CLArray.h 3 | // SimpleProject 4 | // 5 | // Created by Cain on 2017/8/27. 6 | // Copyright © 2017年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSArray (CLArray) 12 | 13 | /** 14 | 创建一个安全的Array 15 | 16 | @param object 对象, 可以为nil 17 | @return NSArray 18 | */ 19 | + (instancetype)cl_initSafeArrayWithObject:(id)object; 20 | 21 | /** 22 | 序列化创建一个NSArray 23 | 24 | @param plist NSData 25 | @return NSArray 26 | */ 27 | + (NSArray *)cl_arrayWithPlistData:(NSData *)plist; 28 | 29 | /** 30 | 从数组里获取一个id对象, 索引超出之后, 也不会崩掉 31 | 32 | @param index 对象索引 33 | @return id 34 | */ 35 | - (id)cl_safeObjectAtIndex:(NSUInteger)index; 36 | 37 | /** 38 | 根据Range返回对应的Array 39 | 40 | @param range range, 这里就算超出了索引也不会引起问题 41 | @return NSArray 42 | */ 43 | - (NSArray *)cl_safeArrayWithRange:(NSRange)range; 44 | 45 | /** 46 | 根据对象返回对应的索引 47 | 48 | @param object 对象 49 | @return NSUInteger 50 | */ 51 | - (NSUInteger)cl_safeIndexOfObject:(id)object; 52 | 53 | /** 54 | 根据给定的Plist文件名返回里面的数组 55 | 56 | @param name Plist文件名 57 | @return NSArray 58 | */ 59 | + (NSArray *)cl_getArrayWithPlistName:(NSString *)name; 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSBundle+CLBundle/NSBundle+CLBundle.h: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // NSBundle+CLBundle.h 10 | // 11 | // Created by Cain on 2017/6/8. 12 | // Copyright © 2017年 Cain. All rights reserved. 13 | // 14 | 15 | #import 16 | 17 | @interface NSBundle (CLBundle) 18 | 19 | /** 20 | 获取App名称 21 | 22 | @return NSString 23 | */ 24 | + (NSString *)cl_getBundleDisplayName; 25 | 26 | /** 27 | 获取App版本号 28 | 29 | @return NSString 30 | */ 31 | + (NSString *)cl_getBundleShortVersionString; 32 | 33 | /** 34 | 获取Build版本号 35 | 36 | @return NSString 37 | */ 38 | + (NSString *)cl_getBundleVersion; 39 | 40 | /** 41 | 获取App Bundle Identifier 42 | 43 | @return NSString 44 | */ 45 | + (NSString *)cl_getBundleIdentifier; 46 | 47 | /** 48 | 获取指定名字的Bundle 49 | 50 | @param name NSString 51 | @param type NSString 52 | @return NSString 53 | */ 54 | + (NSString *)cl_getBundleFileWithName:(NSString *)name 55 | type:(NSString *)type; 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSBundle+CLBundle/NSBundle+CLBundle.m: -------------------------------------------------------------------------------- 1 | // 2 | // __ ______ ______ __ ___ _ 3 | // / __) / \ (_ _) | \ | | 4 | // | / / \ | | | |\ \ | | 5 | // | | / () \ | | | | \ \| | 6 | // | \__ | __ | _| |_ | | \ | 7 | // _\ )_| (__) |_( )_| |___\ |_ 8 | // 9 | // NSBundle+CLBundle.m 10 | // 11 | // Created by Cain on 2017/6/8. 12 | // Copyright © 2017年 Cain. All rights reserved. 13 | // 14 | 15 | #import "NSBundle+CLBundle.h" 16 | 17 | @implementation NSBundle (CLBundle) 18 | 19 | + (NSString *)cl_getBundleDisplayName { 20 | 21 | return [[[self mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]; 22 | } 23 | 24 | + (NSString *)cl_getBundleShortVersionString { 25 | 26 | return [[[self mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; 27 | } 28 | 29 | + (NSString *)cl_getBundleVersion { 30 | 31 | return [[[self mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 32 | } 33 | 34 | + (NSString *)cl_getBundleIdentifier { 35 | 36 | return [[self mainBundle] bundleIdentifier]; 37 | } 38 | 39 | + (NSString *)cl_getBundleFileWithName:(NSString *)name 40 | type:(NSString *)type { 41 | 42 | return [[self mainBundle] pathForResource:name 43 | ofType:type]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSDictionary+CLDictionary/NSDictionary+CLDictionary.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+CLDictionary.h 3 | // SimpleProject 4 | // 5 | // Created by Cain on 2017/8/28. 6 | // Copyright © 2017年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDictionary (CLDictionary) 12 | 13 | /** 14 | 序列化创建一个NSDictionary 15 | 16 | @param plist NSData 17 | @return NSDictionary 18 | */ 19 | + (NSDictionary *)cl_dictionaryWithPlistData:(NSData *)plist; 20 | 21 | /** 22 | 将指定的URL字符串转成NSDictionary 23 | 24 | @param urlString URL字符串, 格式: http://www.xxxx.com?a=1&b=2 || a=1&b=2 25 | @return NSDictionary 26 | */ 27 | + (NSDictionary *)cl_dictionaryWithURLString:(NSString *)urlString; 28 | 29 | /** 30 | 获取NSDictionary的所有排序完成的Keys 31 | 32 | @return NSArray 33 | */ 34 | - (NSArray *)cl_getAllKeysSorted; 35 | 36 | /** 37 | 获取NSDictionary的所有排序完成的Value 38 | 39 | @return NSArray 40 | */ 41 | - (NSArray *)cl_getAllValuesSortedByKeys; 42 | 43 | /** 44 | 查看是否包含指定Key的Object 45 | 46 | @param key id 47 | @return BOOL 48 | */ 49 | - (BOOL)cl_containsObjectForKey:(id)key; 50 | 51 | /** 52 | 获取指定Keys的NSDictionary 53 | 54 | @param keys NSArray 55 | @return NSDictionary 56 | */ 57 | - (NSDictionary *)cl_getDictionaryForKeys:(NSArray *)keys; 58 | 59 | @end 60 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSMutableDictionary+CLMutableDictionary/NSMutableDictionary+CLMutableDictionary.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableDictionary+CLMutableDictionary.h 3 | // SimpleProject 4 | // 5 | // Created by Cain on 2017/8/29. 6 | // Copyright © 2017年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSMutableDictionary (CLMutableDictionary) 12 | 13 | /** 14 | 安全的存储一个键值对 15 | 16 | @param object 值 17 | @param key 键 18 | */ 19 | - (void)cl_setSafeObject:(id)object 20 | forKey:(id)key; 21 | 22 | /** 23 | 安全的根据一个键获取对应的对象 24 | 25 | @param key key 26 | @return id 27 | */ 28 | - (id)cl_safeObjectForKey:(id)key; 29 | 30 | /** 31 | 安全的根据value获取对应的key 32 | 33 | @param value id object 34 | @return id 35 | */ 36 | - (id)cl_safeKeyForValue:(id)value; 37 | 38 | /** 39 | 序列化创建一个NSMutableDictionary 40 | 41 | @param plist NSData 42 | @return NSMutableDictionary 43 | */ 44 | + (NSMutableDictionary *)cl_mutableDictionaryWithPlistData:(NSData *)plist; 45 | 46 | /** 47 | 筛选出需要的Keys并组装成一个NSMutableDictionary, 其他的则会删除 48 | 49 | @param keys NSArray 50 | @return NSMutableDictionary 51 | */ 52 | - (NSMutableDictionary *)cl_popEntriesForKeys:(NSArray *)keys; 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation+Category/NSTimer+CLTimer/NSTimer+CLTimer.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTimer+CLTimer.h 3 | // CLFoundationExample 4 | // 5 | // Created by Cain Luo on 2018/2/22. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | typedef void(^CLTimer)(void); 12 | 13 | @interface NSTimer (CLTimer) 14 | 15 | /** 16 | 创建一个NSTimer对象, 并添加进当前线程 17 | 18 | @param timeInterval NSTimeInterval 19 | @param repeats BOOL 20 | @param complete CLTimer 21 | @return NSTimer 22 | */ 23 | + (NSTimer *)cl_scheduledTimerWithTimeInterval:(NSTimeInterval)timeInterval 24 | repeats:(BOOL)repeats 25 | complete:(CLTimer)complete; 26 | 27 | /** 28 | 创建一个NSTimer对象 29 | 30 | @param timeInterval NSTimeInterval 31 | @param repeats BOOL 32 | @param complete CLTimer 33 | @return NSTimer 34 | */ 35 | + (NSTimer *)cl_timerWithTimeInterval:(NSTimeInterval)timeInterval 36 | repeats:(BOOL)repeats 37 | complete:(CLTimer)complete; 38 | 39 | /** 40 | 开始NSTimer 41 | */ 42 | - (void)cl_resumeTimer; 43 | 44 | /** 45 | 暂停NSTimer 46 | */ 47 | - (void)cl_pauseTimer; 48 | 49 | /** 50 | 延迟指定的时间执行NSTimer 51 | 52 | @param timeInterval NSTimeInterval 53 | */ 54 | - (void)cl_resumeTimerAfterTimeInterval:(NSTimeInterval)timeInterval; 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/CLFoundation/CLSpeechSynthesizer/CLSpeechSynthesizer.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLSpeechSynthesizer.h 3 | // CLFoundationExample 4 | // 5 | // Created by Cain Luo on 2018/4/20. 6 | // Copyright © 2018年 Cain Luo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface CLSpeechSynthesizer : NSObject 13 | 14 | + (instancetype)sharedSpeechSynthesizer; 15 | 16 | /** 17 | 是否正在进行语音播报 18 | 19 | @return BOOL 20 | */ 21 | - (BOOL)cl_isSpeaking; 22 | 23 | /** 24 | 输入指定的语音播报内容 25 | 26 | @param string 语音播报内容 27 | */ 28 | - (void)cl_speakString:(NSString *)string; 29 | 30 | /** 31 | 停止语音播报 32 | */ 33 | - (void)cl_stopSpeak; 34 | 35 | /** 36 | 选择语音播报的语言和播报速度 37 | 38 | @param language 语言, 默认中文 39 | @param speakSpeed 播报速度, 默认0.5 40 | */ 41 | - (void)cl_chooseVoiceWithLanguage:(NSString *)language 42 | speakSpeed:(CGFloat)speakSpeed; 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/CLFoundation/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 CainLuo 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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | @interface MJRefreshAutoFooter : MJRefreshFooter 12 | /** 是否自动刷新(默认为YES) */ 13 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; 14 | 15 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 16 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); 17 | 18 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 19 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; 20 | 21 | /** 是否每一次拖拽只发一次请求 */ 22 | @property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag; 23 | @end 24 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | @interface MJRefreshBackFooter : MJRefreshFooter 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshFooter.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 上拉刷新控件 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | @interface MJRefreshFooter : MJRefreshComponent 13 | /** 创建footer */ 14 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; 15 | /** 创建footer */ 16 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 17 | 18 | /** 提示没有更多的数据 */ 19 | - (void)endRefreshingWithNoMoreData; 20 | - (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); 21 | 22 | /** 重置没有更多的数据(消除没有更多数据的状态) */ 23 | - (void)resetNoMoreData; 24 | 25 | /** 忽略多少scrollView的contentInset的bottom */ 26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; 27 | 28 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ 29 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("不建议使用此属性,开发者请自行控制footer的显示和隐藏。基于安全考虑,在未来的某些版本此属性可能作废"); 30 | @end 31 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // MJRefreshHeader.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 下拉刷新控件:负责监控用户下拉的状态 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | @interface MJRefreshHeader : MJRefreshComponent 13 | /** 创建header */ 14 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock; 15 | /** 创建header */ 16 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 17 | 18 | /** 这个key用来存储上一次下拉刷新成功的时间 */ 19 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey; 20 | /** 上一次下拉刷新成功的时间 */ 21 | @property (strong, nonatomic, readonly) NSDate *lastUpdatedTime; 22 | 23 | /** 忽略多少scrollView的contentInset的top */ 24 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; 25 | @end 26 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter 12 | @property (weak, nonatomic, readonly) UIImageView *gifView; 13 | 14 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter 12 | /** 菊花的样式 */ 13 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; 14 | @end 15 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoFooter.h" 10 | 11 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter 12 | /** 文字距离圈圈、箭头的距离 */ 13 | @property (assign, nonatomic) CGFloat labelLeftInset; 14 | /** 显示刷新状态的label */ 15 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 16 | 17 | /** 设置state状态下的文字 */ 18 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 19 | 20 | /** 隐藏刷新状态的文字 */ 21 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; 22 | @end 23 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter 12 | @property (weak, nonatomic, readonly) UIImageView *gifView; 13 | 14 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter 12 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 13 | /** 菊花的样式 */ 14 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; 15 | @end 16 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackFooter.h" 10 | 11 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter 12 | /** 文字距离圈圈、箭头的距离 */ 13 | @property (assign, nonatomic) CGFloat labelLeftInset; 14 | /** 显示刷新状态的label */ 15 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 16 | /** 设置state状态下的文字 */ 17 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 18 | 19 | /** 获取state状态下的title */ 20 | - (NSString *)titleForState:(MJRefreshState)state; 21 | @end 22 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshGifHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | @interface MJRefreshGifHeader : MJRefreshStateHeader 12 | @property (weak, nonatomic, readonly) UIImageView *gifView; 13 | 14 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 15 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 16 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 17 | @end 18 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshNormalHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | @interface MJRefreshNormalHeader : MJRefreshStateHeader 12 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 13 | /** 菊花的样式 */ 14 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle; 15 | @end 16 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshStateHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshHeader.h" 10 | 11 | @interface MJRefreshStateHeader : MJRefreshHeader 12 | #pragma mark - 刷新时间相关 13 | /** 利用这个block来决定显示的更新时间文字 */ 14 | @property (copy, nonatomic) NSString *(^lastUpdatedTimeText)(NSDate *lastUpdatedTime); 15 | /** 显示上一次刷新时间的label */ 16 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; 17 | 18 | #pragma mark - 状态相关 19 | /** 文字距离圈圈、箭头的距离 */ 20 | @property (assign, nonatomic) CGFloat labelLeftInset; 21 | /** 显示刷新状态的label */ 22 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 23 | /** 设置state状态下的文字 */ 24 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 25 | @end 26 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "MJRefreshHeaderIdleText" = "下拉可以刷新"; 2 | "MJRefreshHeaderPullingText" = "鬆開立即刷新"; 3 | "MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; 4 | 5 | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; 6 | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; 7 | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; 8 | 9 | "MJRefreshBackFooterIdleText" = "上拉可以加載更多"; 10 | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; 11 | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; 12 | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; 13 | 14 | "MJRefreshHeaderLastTimeText" = "最後更新:"; 15 | "MJRefreshHeaderDateTodayText" = "今天"; 16 | "MJRefreshHeaderNoneLastDateText" = "無記錄"; 17 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | 4 | #import "UIScrollView+MJRefresh.h" 5 | #import "UIScrollView+MJExtension.h" 6 | #import "UIView+MJExtension.h" 7 | 8 | #import "MJRefreshNormalHeader.h" 9 | #import "MJRefreshGifHeader.h" 10 | 11 | #import "MJRefreshBackNormalFooter.h" 12 | #import "MJRefreshBackGifFooter.h" 13 | #import "MJRefreshAutoNormalFooter.h" 14 | #import "MJRefreshAutoGifFooter.h" -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+MJRefresh.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 16/6/13. 6 | // Copyright © 2016年 小码哥. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSBundle (MJRefresh) 12 | + (instancetype)mj_refreshBundle; 13 | + (UIImage *)mj_arrowImage; 14 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value; 15 | + (NSString *)mj_localizedStringForKey:(NSString *)key; 16 | @end 17 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | @interface UIScrollView (MJExtension) 13 | @property (readonly, nonatomic) UIEdgeInsets mj_inset; 14 | 15 | @property (assign, nonatomic) CGFloat mj_insetT; 16 | @property (assign, nonatomic) CGFloat mj_insetB; 17 | @property (assign, nonatomic) CGFloat mj_insetL; 18 | @property (assign, nonatomic) CGFloat mj_insetR; 19 | 20 | @property (assign, nonatomic) CGFloat mj_offsetX; 21 | @property (assign, nonatomic) CGFloat mj_offsetY; 22 | 23 | @property (assign, nonatomic) CGFloat mj_contentW; 24 | @property (assign, nonatomic) CGFloat mj_contentH; 25 | @end 26 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIScrollView+MJRefresh.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 给ScrollView增加下拉刷新、上拉刷新的功能 9 | 10 | #import 11 | #import "MJRefreshConst.h" 12 | 13 | @class MJRefreshHeader, MJRefreshFooter; 14 | 15 | @interface UIScrollView (MJRefresh) 16 | /** 下拉刷新控件 */ 17 | @property (strong, nonatomic) MJRefreshHeader *mj_header; 18 | @property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); 19 | /** 上拉刷新控件 */ 20 | @property (strong, nonatomic) MJRefreshFooter *mj_footer; 21 | @property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); 22 | 23 | #pragma mark - other 24 | - (NSInteger)mj_totalDataCount; 25 | @property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount); 26 | @end 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000 3 | // UIView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | @interface UIView (MJExtension) 13 | @property (assign, nonatomic) CGFloat mj_x; 14 | @property (assign, nonatomic) CGFloat mj_y; 15 | @property (assign, nonatomic) CGFloat mj_w; 16 | @property (assign, nonatomic) CGFloat mj_h; 17 | @property (assign, nonatomic) CGSize mj_size; 18 | @property (assign, nonatomic) CGPoint mj_origin; 19 | @end 20 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - CLFoundation (1.7.2): 3 | - "CLFoundation/CLFoundation+Category (= 1.7.2)" 4 | - "CLFoundation/CLFoundation+Category (1.7.2)" 5 | - Masonry (1.1.0) 6 | - MJRefresh (3.1.15.3) 7 | - YYModel (1.0.4) 8 | 9 | DEPENDENCIES: 10 | - CLFoundation 11 | - Masonry 12 | - MJRefresh 13 | - YYModel 14 | 15 | SPEC REPOS: 16 | https://github.com/cocoapods/specs.git: 17 | - CLFoundation 18 | - Masonry 19 | - MJRefresh 20 | - YYModel 21 | 22 | SPEC CHECKSUMS: 23 | CLFoundation: d329a9f578ae0654022d811f160db8ac404346c7 24 | Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 25 | MJRefresh: b48380ae2b927b46c4ef000de9adb8dc748e1df7 26 | YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 27 | 28 | PODFILE CHECKSUM: 7b5513fae7f1abe84a7315ea5254f70818dba6ca 29 | 30 | COCOAPODS: 1.5.3 31 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2012 Masonry Team - https://github.com/Masonry 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASViewAttribute.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * An immutable tuple which stores the view and the related NSLayoutAttribute. 13 | * Describes part of either the left or right hand side of a constraint equation 14 | */ 15 | @interface MASViewAttribute : NSObject 16 | 17 | /** 18 | * The view which the reciever relates to. Can be nil if item is not a view. 19 | */ 20 | @property (nonatomic, weak, readonly) MAS_VIEW *view; 21 | 22 | /** 23 | * The item which the reciever relates to. 24 | */ 25 | @property (nonatomic, weak, readonly) id item; 26 | 27 | /** 28 | * The attribute which the reciever relates to 29 | */ 30 | @property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute; 31 | 32 | /** 33 | * Convenience initializer. 34 | */ 35 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute; 36 | 37 | /** 38 | * The designated initializer. 39 | */ 40 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute; 41 | 42 | /** 43 | * Determine whether the layoutAttribute is a size attribute 44 | * 45 | * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight 46 | */ 47 | - (BOOL)isSizeAttribute; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASViewAttribute.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewAttribute.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | 11 | @implementation MASViewAttribute 12 | 13 | - (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute { 14 | self = [self initWithView:view item:view layoutAttribute:layoutAttribute]; 15 | return self; 16 | } 17 | 18 | - (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute { 19 | self = [super init]; 20 | if (!self) return nil; 21 | 22 | _view = view; 23 | _item = item; 24 | _layoutAttribute = layoutAttribute; 25 | 26 | return self; 27 | } 28 | 29 | - (BOOL)isSizeAttribute { 30 | return self.layoutAttribute == NSLayoutAttributeWidth 31 | || self.layoutAttribute == NSLayoutAttributeHeight; 32 | } 33 | 34 | - (BOOL)isEqual:(MASViewAttribute *)viewAttribute { 35 | if ([viewAttribute isKindOfClass:self.class]) { 36 | return self.view == viewAttribute.view 37 | && self.layoutAttribute == viewAttribute.layoutAttribute; 38 | } 39 | return [super isEqual:viewAttribute]; 40 | } 41 | 42 | - (NSUInteger)hash { 43 | return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/MASViewConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASViewConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASViewAttribute.h" 10 | #import "MASConstraint.h" 11 | #import "MASLayoutConstraint.h" 12 | #import "MASUtilities.h" 13 | 14 | /** 15 | * A single constraint. 16 | * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view 17 | */ 18 | @interface MASViewConstraint : MASConstraint 19 | 20 | /** 21 | * First item/view and first attribute of the NSLayoutConstraint 22 | */ 23 | @property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute; 24 | 25 | /** 26 | * Second item/view and second attribute of the NSLayoutConstraint 27 | */ 28 | @property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute; 29 | 30 | /** 31 | * initialises the MASViewConstraint with the first part of the equation 32 | * 33 | * @param firstViewAttribute view.mas_left, view.mas_width etc. 34 | * 35 | * @return a new view constraint 36 | */ 37 | - (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute; 38 | 39 | /** 40 | * Returns all MASViewConstraints installed with this view as a first item. 41 | * 42 | * @param view A view to retrieve constraints for. 43 | * 44 | * @return An array of MASViewConstraints. 45 | */ 46 | + (NSArray *)installedConstraintsForView:(MAS_VIEW *)view; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/Masonry.h: -------------------------------------------------------------------------------- 1 | // 2 | // Masonry.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 20/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Masonry. 12 | FOUNDATION_EXPORT double MasonryVersionNumber; 13 | 14 | //! Project version string for Masonry. 15 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 16 | 17 | #import "MASUtilities.h" 18 | #import "View+MASAdditions.h" 19 | #import "View+MASShorthandAdditions.h" 20 | #import "ViewController+MASAdditions.h" 21 | #import "NSArray+MASAdditions.h" 22 | #import "NSArray+MASShorthandAdditions.h" 23 | #import "MASConstraint.h" 24 | #import "MASCompositeConstraint.h" 25 | #import "MASViewAttribute.h" 26 | #import "MASViewConstraint.h" 27 | #import "MASConstraintMaker.h" 28 | #import "MASLayoutConstraint.h" 29 | #import "NSLayoutConstraint+MASDebugAdditions.h" 30 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/NSArray+MASShorthandAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+MASShorthandAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 22/07/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "NSArray+MASAdditions.h" 10 | 11 | #ifdef MAS_SHORTHAND 12 | 13 | /** 14 | * Shorthand array additions without the 'mas_' prefixes, 15 | * only enabled if MAS_SHORTHAND is defined 16 | */ 17 | @interface NSArray (MASShorthandAdditions) 18 | 19 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block; 20 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block; 21 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block; 22 | 23 | @end 24 | 25 | @implementation NSArray (MASShorthandAdditions) 26 | 27 | - (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block { 28 | return [self mas_makeConstraints:block]; 29 | } 30 | 31 | - (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block { 32 | return [self mas_updateConstraints:block]; 33 | } 34 | 35 | - (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block { 36 | return [self mas_remakeConstraints:block]; 37 | } 38 | 39 | @end 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/ViewController+MASAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.h 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "MASUtilities.h" 10 | #import "MASConstraintMaker.h" 11 | #import "MASViewAttribute.h" 12 | 13 | #ifdef MAS_VIEW_CONTROLLER 14 | 15 | @interface MAS_VIEW_CONTROLLER (MASAdditions) 16 | 17 | /** 18 | * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute 19 | */ 20 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide; 21 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide; 22 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop; 23 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom; 24 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop; 25 | @property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom; 26 | 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Masonry/Masonry/ViewController+MASAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIViewController+MASAdditions.m 3 | // Masonry 4 | // 5 | // Created by Craig Siemens on 2015-06-23. 6 | // 7 | // 8 | 9 | #import "ViewController+MASAdditions.h" 10 | 11 | #ifdef MAS_VIEW_CONTROLLER 12 | 13 | @implementation MAS_VIEW_CONTROLLER (MASAdditions) 14 | 15 | - (MASViewAttribute *)mas_topLayoutGuide { 16 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 17 | } 18 | - (MASViewAttribute *)mas_topLayoutGuideTop { 19 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 20 | } 21 | - (MASViewAttribute *)mas_topLayoutGuideBottom { 22 | return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 23 | } 24 | 25 | - (MASViewAttribute *)mas_bottomLayoutGuide { 26 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 27 | } 28 | - (MASViewAttribute *)mas_bottomLayoutGuideTop { 29 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop]; 30 | } 31 | - (MASViewAttribute *)mas_bottomLayoutGuideBottom { 32 | return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom]; 33 | } 34 | 35 | 36 | 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/CLFoundation-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_CLFoundation : NSObject 3 | @end 4 | @implementation PodsDummy_CLFoundation 5 | @end 6 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/CLFoundation-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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/CLFoundation-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 | #import "CLFoundation.h" 14 | #import "CLSpeechSynthesizer.h" 15 | #import "NSArray+CLArray.h" 16 | #import "NSAttributedString+CLAttributedString.h" 17 | #import "NSBundle+CLBundle.h" 18 | #import "NSData+CLData.h" 19 | #import "NSDate+CLDate.h" 20 | #import "NSDictionary+CLDictionary.h" 21 | #import "NSFileManager+CLFileManager.h" 22 | #import "NSMutableArray+CLMutableArray.h" 23 | #import "NSMutableAttributedString+CLMutableAttributedString.h" 24 | #import "NSMutableDictionary+CLMutableDictionary.h" 25 | #import "NSNotificationCenter+CLNotificationCenter.h" 26 | #import "NSNumber+CLNumber.h" 27 | #import "NSObject+CLObject.h" 28 | #import "NSString+CLString.h" 29 | #import "NSTimer+CLTimer.h" 30 | #import "NSURL+CLURL.h" 31 | 32 | FOUNDATION_EXPORT double CLFoundationVersionNumber; 33 | FOUNDATION_EXPORT const unsigned char CLFoundationVersionString[]; 34 | 35 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/CLFoundation.modulemap: -------------------------------------------------------------------------------- 1 | framework module CLFoundation { 2 | umbrella header "CLFoundation-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/CLFoundation.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CLFoundation 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" 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}/CLFoundation 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/CLFoundation/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.7.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/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 | 3.1.15 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MJRefresh : NSObject 3 | @end 4 | @implementation PodsDummy_MJRefresh 5 | @end 6 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/MJRefresh-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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/MJRefresh-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 | #import "MJRefreshAutoFooter.h" 14 | #import "MJRefreshBackFooter.h" 15 | #import "MJRefreshComponent.h" 16 | #import "MJRefreshFooter.h" 17 | #import "MJRefreshHeader.h" 18 | #import "MJRefreshAutoGifFooter.h" 19 | #import "MJRefreshAutoNormalFooter.h" 20 | #import "MJRefreshAutoStateFooter.h" 21 | #import "MJRefreshBackGifFooter.h" 22 | #import "MJRefreshBackNormalFooter.h" 23 | #import "MJRefreshBackStateFooter.h" 24 | #import "MJRefreshGifHeader.h" 25 | #import "MJRefreshNormalHeader.h" 26 | #import "MJRefreshStateHeader.h" 27 | #import "MJRefresh.h" 28 | #import "MJRefreshConst.h" 29 | #import "NSBundle+MJRefresh.h" 30 | #import "UIScrollView+MJExtension.h" 31 | #import "UIScrollView+MJRefresh.h" 32 | #import "UIView+MJExtension.h" 33 | 34 | FOUNDATION_EXPORT double MJRefreshVersionNumber; 35 | FOUNDATION_EXPORT const unsigned char MJRefreshVersionString[]; 36 | 37 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/MJRefresh.modulemap: -------------------------------------------------------------------------------- 1 | framework module MJRefresh { 2 | umbrella header "MJRefresh-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/MJRefresh/MJRefresh.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | PODS_BUILD_DIR = ${BUILD_DIR} 4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT} 6 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/MJRefresh 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/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.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/Masonry-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Masonry : NSObject 3 | @end 4 | @implementation PodsDummy_Masonry 5 | @end 6 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/Masonry-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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/Masonry-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 | #import "MASCompositeConstraint.h" 14 | #import "MASConstraint+Private.h" 15 | #import "MASConstraint.h" 16 | #import "MASConstraintMaker.h" 17 | #import "MASLayoutConstraint.h" 18 | #import "Masonry.h" 19 | #import "MASUtilities.h" 20 | #import "MASViewAttribute.h" 21 | #import "MASViewConstraint.h" 22 | #import "NSArray+MASAdditions.h" 23 | #import "NSArray+MASShorthandAdditions.h" 24 | #import "NSLayoutConstraint+MASDebugAdditions.h" 25 | #import "View+MASAdditions.h" 26 | #import "View+MASShorthandAdditions.h" 27 | #import "ViewController+MASAdditions.h" 28 | 29 | FOUNDATION_EXPORT double MasonryVersionNumber; 30 | FOUNDATION_EXPORT const unsigned char MasonryVersionString[]; 31 | 32 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/Masonry.modulemap: -------------------------------------------------------------------------------- 1 | framework module Masonry { 2 | umbrella header "Masonry-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Masonry/Masonry.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = -framework "Foundation" -framework "UIKit" 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}/Masonry 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/Pods-CLUIKitExample-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_CLUIKitExample : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_CLUIKitExample 5 | @end 6 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/Pods-CLUIKitExample-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_CLUIKitExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_CLUIKitExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/Pods-CLUIKitExample.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/YYModel" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/CLFoundation/CLFoundation.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YYModel/YYModel.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "CLFoundation" -framework "MJRefresh" -framework "Masonry" -framework "YYModel" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/Pods-CLUIKitExample.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_CLUIKitExample { 2 | umbrella header "Pods-CLUIKitExample-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/Pods-CLUIKitExample/Pods-CLUIKitExample.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLFoundation" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/YYModel" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/CLFoundation/CLFoundation.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/YYModel/YYModel.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "CLFoundation" -framework "MJRefresh" -framework "Masonry" -framework "YYModel" 6 | PODS_BUILD_DIR = ${BUILD_DIR} 7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/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.4 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/YYModel-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_YYModel : NSObject 3 | @end 4 | @implementation PodsDummy_YYModel 5 | @end 6 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/YYModel-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 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/YYModel-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 | #import "NSObject+YYModel.h" 14 | #import "YYClassInfo.h" 15 | #import "YYModel.h" 16 | 17 | FOUNDATION_EXPORT double YYModelVersionNumber; 18 | FOUNDATION_EXPORT const unsigned char YYModelVersionString[]; 19 | 20 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/YYModel.modulemap: -------------------------------------------------------------------------------- 1 | framework module YYModel { 2 | umbrella header "YYModel-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/Target Support Files/YYModel/YYModel.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/YYModel 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = -framework "CoreFoundation" -framework "Foundation" 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}/YYModel 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/YYModel/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 ibireme 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 | 23 | -------------------------------------------------------------------------------- /CLUIKitExample/Pods/YYModel/YYModel/YYModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // YYModel.h 3 | // YYModel 4 | // 5 | // Created by ibireme on 15/5/10. 6 | // Copyright (c) 2015 ibireme. 7 | // 8 | // This source code is licensed under the MIT-style license found in the 9 | // LICENSE file in the root directory of this source tree. 10 | // 11 | 12 | #import 13 | 14 | #if __has_include() 15 | FOUNDATION_EXPORT double YYModelVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char YYModelVersionString[]; 17 | #import 18 | #import 19 | #else 20 | #import "NSObject+YYModel.h" 21 | #import "YYClassInfo.h" 22 | #endif 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 CainLuo 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 | -------------------------------------------------------------------------------- /iCons/Screen/Screen4.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/Screen/Screen4.0.png -------------------------------------------------------------------------------- /iCons/Screen/Screen4.7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/Screen/Screen4.7.png -------------------------------------------------------------------------------- /iCons/Screen/Screen5.5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/Screen/Screen5.5.png -------------------------------------------------------------------------------- /iCons/Screen/Screen5.8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/Screen/Screen5.8.png -------------------------------------------------------------------------------- /iCons/iCon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iCon1024.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-20.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-72.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-72@2x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-76.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-76@2x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-76@3x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Small-50.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Small-50@2x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Small.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Small@2x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Small@3x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /iCons/iPad/Icon-iPadPro@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/Icon-iPadPro@2x.png -------------------------------------------------------------------------------- /iCons/iPad/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/iTunesArtwork -------------------------------------------------------------------------------- /iCons/iPad/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPad/iTunesArtwork@2x -------------------------------------------------------------------------------- /iCons/iPhone/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-60.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-60@2x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-60@3x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Small.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Small@2x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Small@3x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon.png -------------------------------------------------------------------------------- /iCons/iPhone/Icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/Icon@2x.png -------------------------------------------------------------------------------- /iCons/iPhone/iTunesArtwork: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/iTunesArtwork -------------------------------------------------------------------------------- /iCons/iPhone/iTunesArtwork@2x: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CainLuo/CLUIKit/32280f2347b19c6ce0f367b876aa1d75e56696ea/iCons/iPhone/iTunesArtwork@2x --------------------------------------------------------------------------------