├── DYKitDemo
├── Assets.xcassets
│ ├── Contents.json
│ ├── head.imageset
│ │ ├── head@2x.png
│ │ ├── head@3x.png
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── module
│ ├── model
│ │ ├── User.m
│ │ └── User.h
│ ├── view
│ │ ├── BlueTableViewCell.h
│ │ ├── OneTypeCellByClassTableViewCell.h
│ │ ├── CellWithButtonByNibTableViewCell.h
│ │ ├── OneTypeCellByNibTableViewCell.h
│ │ ├── BlueTableViewCell.m
│ │ ├── OneTypeCellByNibTableViewCell.m
│ │ ├── CellWithButtonByNibTableViewCell.m
│ │ ├── OneTypeCellByClassTableViewCell.m
│ │ ├── CellWithButtonByNibTableViewCell.xib
│ │ └── OneTypeCellByNibTableViewCell.xib
│ └── controller
│ │ ├── DataSlotViewController.h
│ │ ├── SectionsViewController.h
│ │ ├── CellWithRowViewController.h
│ │ ├── EditActionsViewController.h
│ │ ├── OneTypeCellViewController.h
│ │ ├── CellWithSectionViewController.h
│ │ ├── DataSlotForHeightViewController.h
│ │ ├── CellWithSectionAndRowViewController.h
│ │ ├── DataSlotViewController.m
│ │ ├── SectionsViewController.m
│ │ ├── CellWithRowViewController.m
│ │ ├── OneTypeCellViewController.m
│ │ ├── EditActionsViewController.m
│ │ ├── CellWithSectionAndRowViewController.m
│ │ ├── DataSlotViewController.xib
│ │ ├── SectionsViewController.xib
│ │ ├── CellWithRowViewController.xib
│ │ ├── EditActionsViewController.xib
│ │ ├── OneTypeCellViewController.xib
│ │ ├── CellWithSectionViewController.xib
│ │ ├── DataSlotForHeightViewController.xib
│ │ ├── CellWithSectionAndRowViewController.xib
│ │ ├── DataSlotForHeightViewController.m
│ │ └── CellWithSectionViewController.m
├── ViewController.h
├── AppDelegate.h
├── main.m
├── Info.plist
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── AppDelegate.m
└── ViewController.m
├── DYKit
├── DYKit.h
├── DYTableViewModule.m
├── DYTableViewRowAction.m
├── DYTableViewRowAction.h
├── DYTableViewModule.h
├── DYMacro.h
├── UITableView+DYTableViewBinder.h
├── DYTableViewAgent.h
├── UITableView+DYTableViewBinder.m
└── DYTableViewAgent.m
├── DYKitDemo.xcodeproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── project.pbxproj
├── DYKitDemo.xcworkspace
└── contents.xcworkspacedata
├── Podfile
├── Podfile.lock
├── DYKit.podspec
├── DYKitDemoTests
├── Info.plist
└── DYKitDemoTests.m
├── LICENSE
├── .gitignore
└── README.md
/DYKitDemo/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/DYKitDemo/Assets.xcassets/head.imageset/head@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jyo2206208/DYKit/HEAD/DYKitDemo/Assets.xcassets/head.imageset/head@2x.png
--------------------------------------------------------------------------------
/DYKitDemo/Assets.xcassets/head.imageset/head@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jyo2206208/DYKit/HEAD/DYKitDemo/Assets.xcassets/head.imageset/head@3x.png
--------------------------------------------------------------------------------
/DYKit/DYKit.h:
--------------------------------------------------------------------------------
1 | //
2 | // DYKit.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/11.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "UITableView+DYTableViewBinder.h"
10 |
--------------------------------------------------------------------------------
/DYKitDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/DYKitDemo/module/model/User.m:
--------------------------------------------------------------------------------
1 | //
2 | // User.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "User.h"
10 |
11 | @implementation User
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/BlueTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // BlueTableViewCell.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface BlueTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // DataSlotViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/25.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface DataSlotViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/SectionsViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // SectionsViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by farfetch on 2017/9/11.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SectionsViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithRowViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithRowViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface CellWithRowViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/EditActionsViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // EditActionsViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/9/6.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface EditActionsViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/OneTypeCellViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface OneTypeCellViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/OneTypeCellByClassTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellByClassTableViewCell.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface OneTypeCellByClassTableViewCell : UITableViewCell
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithSectionViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface CellWithSectionViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotForHeightViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // DataSlotForHeightViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/8/16.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface DataSlotForHeightViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. 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 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionAndRowViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithSectionAndRowViewController.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface CellWithSectionAndRowViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/DYKitDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. 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 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/CellWithButtonByNibTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithButtonByNibTableViewCell.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface CellWithButtonByNibTableViewCell : UITableViewCell
12 | @property (weak, nonatomic) IBOutlet UIButton *addButton;
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewModule.m:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewModule.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/8/16.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "DYTableViewModule.h"
10 |
11 | @implementation DYTableViewModule
12 |
13 | - (void)setEditActions:(NSArray *)editActions{
14 | _editing = YES;
15 | _editActions = editActions;
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/DYKitDemo/Assets.xcassets/head.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "head@2x.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "filename" : "head@3x.png",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | platform :ios, '8.0'
3 |
4 | target 'DYKitDemo' do
5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
6 | # use_frameworks!
7 |
8 | # Pods for DYKitDemo
9 | pod 'ReactiveObjC'
10 | pod 'MLeaksFinder', :inhibit_warnings => true
11 |
12 | target 'DYKitDemoTests' do
13 | inherit! :search_paths
14 | # Pods for testing
15 | end
16 |
17 | end
18 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - FBRetainCycleDetector (0.1.3)
3 | - MLeaksFinder (0.2.1):
4 | - FBRetainCycleDetector
5 | - ReactiveObjC (3.0.0)
6 |
7 | DEPENDENCIES:
8 | - MLeaksFinder
9 | - ReactiveObjC
10 |
11 | SPEC CHECKSUMS:
12 | FBRetainCycleDetector: f0c7b290bf48ae77f6ae060843ce34ae341781eb
13 | MLeaksFinder: 0850e2f2abc7227adc4d4e2d1992b431264eb4d5
14 | ReactiveObjC: ce79989e8684b9086b5f8d0c74bc7b81a8729c9e
15 |
16 | PODFILE CHECKSUM: d546f13f20fd10121b1b33f0cf519399c8849bb7
17 |
18 | COCOAPODS: 1.3.1
19 |
--------------------------------------------------------------------------------
/DYKitDemo/module/model/User.h:
--------------------------------------------------------------------------------
1 | //
2 | // User.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface User : NSObject
12 |
13 | @property (nonatomic, copy) NSString *id;
14 | @property (nonatomic, copy) NSString *name;
15 | @property (nonatomic, copy) NSString *img;
16 | @property (nonatomic, copy) NSString *age;
17 | @property (nonatomic, copy) NSString *desc;
18 | @property (nonatomic) int sex;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/OneTypeCellByNibTableViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellByNibTableViewCell.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface OneTypeCellByNibTableViewCell : UITableViewCell
12 | @property (weak, nonatomic) IBOutlet UIImageView *headImageView;
13 | @property (weak, nonatomic) IBOutlet UILabel *nameLabel;
14 | @property (weak, nonatomic) IBOutlet UILabel *descLabel;
15 | @property (weak, nonatomic) IBOutlet UILabel *ageLabel;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/BlueTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // BlueTableViewCell.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "BlueTableViewCell.h"
10 |
11 | @implementation BlueTableViewCell
12 |
13 | - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
14 | {
15 | if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
16 | self.contentView.backgroundColor = [UIColor blueColor];
17 | }
18 | return self;
19 | }
20 | @end
21 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/OneTypeCellByNibTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellByNibTableViewCell.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "OneTypeCellByNibTableViewCell.h"
10 |
11 | @implementation OneTypeCellByNibTableViewCell
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | // Initialization code
16 | }
17 |
18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
19 | [super setSelected:selected animated:animated];
20 |
21 | // Configure the view for the selected state
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/CellWithButtonByNibTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithButtonByNibTableViewCell.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "CellWithButtonByNibTableViewCell.h"
10 |
11 | @implementation CellWithButtonByNibTableViewCell
12 |
13 | - (void)awakeFromNib {
14 | [super awakeFromNib];
15 | // Initialization code
16 | }
17 |
18 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
19 | [super setSelected:selected animated:animated];
20 |
21 | // Configure the view for the selected state
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/OneTypeCellByClassTableViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellByClassTableViewCell.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/9.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "OneTypeCellByClassTableViewCell.h"
10 |
11 | @implementation OneTypeCellByClassTableViewCell
12 |
13 | - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
14 | {
15 | if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
16 | self.contentView.backgroundColor = [UIColor yellowColor];
17 | }
18 | return self;
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/DYKit.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 |
3 | s.name = "DYKit"
4 | s.version = "1.0.1"
5 | s.summary = "DYKit easyUse UITableView block reactiveCocoa"
6 | s.description = <<-DESC
7 | DYKit easyUse UITableView block reactiveCocoa reactiveObjC
8 | DESC
9 | s.homepage = "https://github.com/jyo2206208/DYKit"
10 | s.license = { :type => "MIT", :file => "LICENSE" }
11 | s.author = { "shaggon" => "715135546@qq.com" }
12 | s.ios.deployment_target = "8.0"
13 | s.source = { :git => "https://github.com/jyo2206208/DYKit.git", :tag => "#{s.version}" }
14 | s.source_files = "DYKit/*.{h,m}"
15 | s.dependency "ReactiveObjC"
16 |
17 | end
18 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewRowAction.m:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewRowAction.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/9/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "DYTableViewRowAction.h"
10 |
11 | @implementation DYTableViewRowAction
12 |
13 | + (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullable NSString *)title handler:(nullable void (^)(UITableViewRowAction * action, id model , NSIndexPath * indexPath))handler{
14 | DYTableViewRowAction *tableViewAction = [[DYTableViewRowAction alloc] init];
15 | tableViewAction.style = style;
16 | tableViewAction.title = title;
17 | tableViewAction.handler = handler;
18 | return tableViewAction;
19 | }
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/DYKitDemoTests/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 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewRowAction.h:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewRowAction.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/9/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface DYTableViewRowAction : NSObject
12 |
13 | NS_ASSUME_NONNULL_BEGIN
14 | @property (nonatomic) UITableViewRowActionStyle style;
15 | @property (nonatomic, copy, nullable) NSString *title;
16 | @property (nonatomic, copy, nullable) void (^ handler)(UITableViewRowAction * action, id model , NSIndexPath * indexPath);
17 |
18 | + (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullable NSString *)title handler:(nullable void (^)(UITableViewRowAction * action, id model , NSIndexPath * indexPath))handler;
19 |
20 | NS_ASSUME_NONNULL_END
21 |
22 | @end
23 |
--------------------------------------------------------------------------------
/DYKitDemoTests/DYKitDemoTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // DYKitDemoTests.m
3 | // DYKitDemoTests
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "ReactiveObjC.h"
11 |
12 | @interface DYKitDemoTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation DYKitDemoTests
17 |
18 | - (void)setUp {
19 | [super setUp];
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 | }
22 |
23 | - (void)tearDown {
24 | // Put teardown code here. This method is called after the invocation of each test method in the class.
25 | [super tearDown];
26 | }
27 |
28 | - (void)testExample {
29 |
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewModule.h:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewModule.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/8/16.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "DYMacro.h"
11 | #import "DYTableViewRowAction.h"
12 |
13 | @interface DYTableViewModule : NSObject
14 |
15 | typedef void(^AssemblyBlock)(id cell,id model,NSIndexPath *indexPath);
16 | typedef BOOL(^SlotBlock)(NSIndexPath *indexPath, id model);
17 |
18 | @property (nonatomic, copy) NSString *reuseIdentifier;
19 | @property (nonatomic, copy) SlotBlock slotBlock;
20 | @property (nonatomic, copy) AssemblyBlock assemblyBlock;
21 |
22 | @property (nonatomic) CGFloat rowHeight;
23 | @property (nonatomic) CGFloat estimatedHeight;
24 | @property (nonatomic, copy) NSArray * editActions;
25 | @property (nonatomic) BOOL shouldShowMenu;
26 | @property (nonatomic) UITableViewCellEditingStyle editingStyle;
27 | //@property (nonatomic, copy) NSString *titleForDeleteConfirmationButton;
28 | @property (nonatomic) NSInteger indentationLevel;
29 |
30 | @property (nonatomic) BOOL editing;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 duye
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 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // DataSlotViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/25.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "DataSlotViewController.h"
10 | #import "DYKit.h"
11 |
12 | @interface DataSlotViewController ()
13 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
14 |
15 | @end
16 |
17 | @implementation DataSlotViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 |
23 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
24 | cell.textLabel.text = text;
25 | }];
26 |
27 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
28 | cell.textLabel.text = [text stringByAppendingString:@" 长度不达3的有这段文字"];
29 | cell.backgroundColor = [UIColor yellowColor];
30 | } fromSlot:^BOOL(NSIndexPath *indexPath, NSString *text) {
31 | return text.length < 3;
32 | }];
33 |
34 |
35 | RAC(self,tableView.data) = [RACSignal return:@[@"0",@"01",@"012",@"0123",@"01234",@"a",@"bb",@"ccc",@"dddd"]];
36 |
37 |
38 | }
39 |
40 |
41 |
42 | @end
43 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/SectionsViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // SectionsViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by farfetch on 2017/9/11.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "SectionsViewController.h"
10 | #import "DYKit.h"
11 |
12 | @interface SectionsViewController ()
13 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
14 |
15 | @end
16 |
17 | @implementation SectionsViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
23 | cell.textLabel.text = text;
24 | }];
25 |
26 | [[[self.tableView setSectionData:^NSArray *(NSDictionary *model, NSInteger section) {
27 | return model[@"data"];
28 | }] setTitleForHeaderInSection:^NSString *(UITableView *tableView, NSInteger section) {
29 | return [NSString stringWithFormat:@"这是第%ld个section", (long)section];
30 | }] setSectionHeaderHeight:30];
31 |
32 |
33 |
34 | self.tableView.data = @[@{@"name":@"港台明星",@"data":@[@"刘德华",@"张学友",@"黎明",@"郭富城",@"蔡康永"]},
35 | @{@"name":@"大陆明星",@"data":@[@"薛之谦",@"杨幂",@"王宝强",@"黄渤"]},
36 | @{@"name":@"动漫明星",@"data":@[@"机器猫",@"大熊",@"(●—●)",@"美少女战士",@"孙悟空",@"贝吉塔"]},
37 | ];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithRowViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithRowViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "CellWithRowViewController.h"
10 | #import "BlueTableViewCell.h"
11 | #import "DYKit.h"
12 |
13 | @interface CellWithRowViewController ()
14 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
15 |
16 | @end
17 |
18 | @implementation CellWithRowViewController
19 |
20 | - (void)viewDidLoad {
21 | [super viewDidLoad];
22 |
23 | [self.tableView setHeightForRowAtIndexPath:^CGFloat(UITableView *tableView, NSIndexPath *indexPath) {
24 | return indexPath.row == 1 ? 20 : 40;
25 | }];
26 |
27 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
28 | cell.textLabel.text = text;
29 | }];
30 |
31 | [[self.tableView assembly:^(BlueTableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
32 | cell.textLabel.text = text;
33 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
34 | //只有row==5的位置才使用BlueTableViewCell
35 | return indexPath.row == 5;
36 | } withPlug:BlueTableViewCell.class] setRowHeight:100];
37 |
38 |
39 |
40 | self.tableView.data = @[@"刘德华",@"张学友",@"黎明",@"郭富城",@"郭德纲",@"郭敬明",@"黄晓明",@"柴静",@"宋祖德",@"大S",@"小S",@"欧阳娜娜",@"王力宏",@"周杰伦",@"机器猫",@"大熊",@"(●—●)",@"美少女战士",@"孙悟空",@"贝吉塔"];
41 | }
42 |
43 | @end
44 |
--------------------------------------------------------------------------------
/DYKit/DYMacro.h:
--------------------------------------------------------------------------------
1 | //
2 | // DYMacro.h
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/8/16.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #ifndef DYMacro_h
10 | #define DYMacro_h
11 |
12 | // 懒加载
13 | #define DY_LAZY(object, assignment) (object = object ?: assignment)
14 | #define DYN_LAZY(object, typeClass) -(typeClass *)object{return _##object = (_##object ?: [[typeClass alloc] init]);}
15 |
16 | // 动态添加属性(对象)
17 | #define DYSYNTH_DYNAMIC_PROPERTY_OBJECT(_getter_, _setter_, _association_, _type_) \
18 | - (void)_setter_ : (_type_)object { \
19 | [self willChangeValueForKey:@#_getter_]; \
20 | objc_setAssociatedObject(self, _cmd, object, OBJC_ASSOCIATION_ ## _association_); \
21 | [self didChangeValueForKey:@#_getter_]; \
22 | } \
23 | - (_type_)_getter_ { \
24 | return objc_getAssociatedObject(self, @selector(_setter_:)); \
25 | }
26 |
27 | // 动态添加属性(基本数据类型)
28 | #define DYSYNTH_DYNAMIC_PROPERTY_CTYPE(_getter_, _setter_, _type_) \
29 | - (void)_setter_ : (_type_)object { \
30 | [self willChangeValueForKey:@#_getter_]; \
31 | NSValue *value = [NSValue value:&object withObjCType:@encode(_type_)]; \
32 | objc_setAssociatedObject(self, _cmd, value, OBJC_ASSOCIATION_RETAIN); \
33 | [self didChangeValueForKey:@#_getter_]; \
34 | } \
35 | - (_type_)_getter_ { \
36 | _type_ cValue = { 0 }; \
37 | NSValue *value = objc_getAssociatedObject(self, @selector(_setter_:)); \
38 | [value getValue:&cValue]; \
39 | return cValue; \
40 | }
41 |
42 |
43 |
44 | #endif /* DYMacro_h */
45 |
--------------------------------------------------------------------------------
/DYKitDemo/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 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xccheckout
23 | *.xcscmblueprint
24 |
25 | ## Obj-C/Swift specific
26 | *.hmap
27 | *.ipa
28 | *.dSYM.zip
29 | *.dSYM
30 |
31 | # CocoaPods
32 | #
33 | # We recommend against adding the Pods directory to your .gitignore. However
34 | # you should judge for yourself, the pros and cons are mentioned at:
35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
36 | #
37 | Pods/
38 |
39 | # Carthage
40 | #
41 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
42 | # Carthage/Checkouts
43 |
44 | Carthage/Build
45 |
46 | # fastlane
47 | #
48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
49 | # screenshots whenever they are needed.
50 | # For more information about the recommended setup visit:
51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
52 |
53 | fastlane/report.xml
54 | fastlane/Preview.html
55 | fastlane/screenshots
56 | fastlane/test_output
57 |
58 | # Code Injection
59 | #
60 | # After new code Injection tools there's a generated folder /iOSInjectionProject
61 | # https://github.com/johnno1962/injectionforxcode
62 |
63 | iOSInjectionProject/
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/OneTypeCellViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // OneTypeCellViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "OneTypeCellViewController.h"
10 | #import "DYKit.h"
11 | #import "User.h"
12 | #import "OneTypeCellByNibTableViewCell.h"
13 |
14 | @interface OneTypeCellViewController ()
15 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
16 |
17 | @end
18 |
19 | @implementation OneTypeCellViewController
20 |
21 | - (void)viewDidLoad {
22 | [super viewDidLoad];
23 |
24 | [self.tableView assembly:^(OneTypeCellByNibTableViewCell *cell, User *user, NSIndexPath *indexPath) {
25 | cell.headImageView.image = [UIImage imageNamed:user.img];
26 | cell.headImageView.backgroundColor = user.sex == 0 ? [UIColor purpleColor] : [UIColor blackColor];
27 | cell.nameLabel.text = user.name;
28 | cell.ageLabel.text = user.age;
29 | cell.descLabel.text = user.desc;
30 | } withPlug:OneTypeCellByNibTableViewCell.class];
31 |
32 | User *user1 = [User new];
33 | User *user2 = [User new];
34 | User *user3 = [User new];
35 |
36 | user1.id = @"001";
37 | user1.name = @"jack";
38 | user1.img = @"head";
39 | user1.age = @"29";
40 | user1.desc = @"她喜欢黑色";
41 | user1.sex = 0;
42 | user2.id = @"002";
43 | user2.name = @"Pink man";
44 | user2.img = @"head";
45 | user2.age = @"18";
46 | user2.desc = @"白老师得意门生";
47 | user2.sex = 1;
48 | user3.id = @"003";
49 | user3.name = @"MR.white";
50 | user3.img = @"head";
51 | user3.age = @"43";
52 | user3.desc = @"平淡无奇的中学化学老师";
53 | user3.sex = 1;
54 |
55 | self.tableView.data = @[user1,user2,user3];
56 | }
57 |
58 | @end
59 |
--------------------------------------------------------------------------------
/DYKitDemo/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/DYKitDemo/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | }
88 | ],
89 | "info" : {
90 | "version" : 1,
91 | "author" : "xcode"
92 | }
93 | }
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/EditActionsViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // EditActionsViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/9/6.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "EditActionsViewController.h"
10 | #import "DYKit.h"
11 |
12 | @interface EditActionsViewController ()
13 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
14 |
15 | @end
16 |
17 | @implementation EditActionsViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 | DYTableViewRowAction *firstAction = [DYTableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"第一" handler:^(UITableViewRowAction * _Nonnull action, NSString *text, NSIndexPath * _Nonnull indexPath) {
23 | NSLog(@"按钮第一的数据为:%@",text);
24 | }];
25 |
26 | DYTableViewRowAction *secondAction = [DYTableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"第二" handler:^(UITableViewRowAction * _Nonnull action, NSString *text, NSIndexPath * _Nonnull indexPath) {
27 | NSLog(@"按钮第二的数据为:%@",text);
28 | }];
29 |
30 |
31 | [[self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
32 | cell.textLabel.text = text;
33 | } fromSlot:^BOOL(NSIndexPath *indexPath, NSString *text) {
34 | return text.length < 3;
35 | }] setEditActions:@[firstAction]];
36 |
37 | [[self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
38 | cell.textLabel.text = text;
39 | } fromSlot:^BOOL(NSIndexPath *indexPath, NSString *text) {
40 | return text.length >= 3;
41 | }] setEditActions:@[firstAction,secondAction]];
42 |
43 |
44 |
45 | NSArray *(^dataBlock)() = ^() {
46 | NSMutableArray *array = [[NSMutableArray alloc] init];
47 | int count = arc4random() % 30;
48 | for (int i = 0; i < count; i++) {
49 | [array addObject:[NSString stringWithFormat:@"%i",arc4random() % 1000]];
50 | }
51 | return array;
52 | };
53 |
54 | self.tableView.data = dataBlock();
55 | }
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/DYKitDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @interface AppDelegate ()
12 |
13 | @end
14 |
15 | @implementation AppDelegate
16 |
17 |
18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
19 | // Override point for customization after application launch.
20 | return YES;
21 | }
22 |
23 |
24 | - (void)applicationWillResignActive:(UIApplication *)application {
25 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
27 | }
28 |
29 |
30 | - (void)applicationDidEnterBackground:(UIApplication *)application {
31 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
33 | }
34 |
35 |
36 | - (void)applicationWillEnterForeground:(UIApplication *)application {
37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
38 | }
39 |
40 |
41 | - (void)applicationDidBecomeActive:(UIApplication *)application {
42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
43 | }
44 |
45 |
46 | - (void)applicationWillTerminate:(UIApplication *)application {
47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
48 | }
49 |
50 |
51 | @end
52 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionAndRowViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithSectionAndRowViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "CellWithSectionAndRowViewController.h"
10 | #import "DYKit.h"
11 | #import "User.h"
12 | #import "OneTypeCellByNibTableViewCell.h"
13 |
14 | @interface CellWithSectionAndRowViewController ()
15 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
16 |
17 | @end
18 |
19 | @implementation CellWithSectionAndRowViewController
20 |
21 | - (void)viewDidLoad {
22 | [super viewDidLoad];
23 |
24 |
25 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
26 | cell.textLabel.text = text;
27 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
28 | return !(indexPath.section == 1 && indexPath.row == 0);
29 | }];
30 |
31 | [self.tableView assembly:^(OneTypeCellByNibTableViewCell *cell, User *user, NSIndexPath *indexPath) {
32 | cell.headImageView.image = [UIImage imageNamed:user.img];
33 | cell.headImageView.backgroundColor = user.sex == 0 ? [UIColor purpleColor] : [UIColor blackColor];
34 | cell.nameLabel.text = user.name;
35 | cell.ageLabel.text = user.age;
36 | cell.descLabel.text = user.desc;
37 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
38 | return indexPath.section == 1 && indexPath.row == 0;
39 | } withPlug:OneTypeCellByNibTableViewCell.class];
40 |
41 | [[[self.tableView setSectionData:^NSArray *(id model, NSInteger section) {
42 | return model;
43 | }] setTitleForHeaderInSection:^NSString *(UITableView *tableView, NSInteger section) {
44 | return [NSString stringWithFormat:@"这是第%ld个section", (long)section];
45 | }] setSectionHeaderHeight:30];
46 |
47 |
48 | User *user1 = [User new];
49 | user1.id = @"001";
50 | user1.name = @"jack";
51 | user1.img = @"head";
52 | user1.age = @"29";
53 | user1.desc = @"她喜欢黑色";
54 | user1.sex = 0;
55 |
56 | self.tableView.data = @[@[@"刘德华",@"张学友",@"黎明",@"郭富城",@"郭德纲",@"郭敬明",@"黄晓明",@"柴静",@"宋祖德",@"大S",@"小S",@"欧阳娜娜",@"王力宏",@"周杰伦"],
57 | @[user1,@"机器猫",@"大熊",@"(●—●)",@"美少女战士",@"孙悟空",@"贝吉塔"]];
58 |
59 | }
60 |
61 | @end
62 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/SectionsViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithRowViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/EditActionsViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/OneTypeCellViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotForHeightViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionAndRowViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/CellWithButtonByNibTableViewCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/DataSlotForHeightViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // DataSlotForHeightViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/8/16.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "DataSlotForHeightViewController.h"
10 | #import "DYKit.h"
11 |
12 | @interface DataSlotForHeightViewController ()
13 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
14 |
15 | @end
16 |
17 | @implementation DataSlotForHeightViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 |
22 | NSArray *(^dataBlock)() = ^() {
23 | NSMutableArray *array = [[NSMutableArray alloc] init];
24 | int count = arc4random() % 30;
25 | for (int i = 0; i < count; i++) {
26 | [array addObject:[NSString stringWithFormat:@"%i",arc4random() % 1000]];
27 | }
28 | return array;
29 | };
30 |
31 |
32 |
33 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
34 | cell.textLabel.text = text;
35 | }];
36 |
37 | [[self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
38 | cell.textLabel.text = [text stringByAppendingString:@" 长度不达3的有这段文字"];
39 | } fromSlot:^BOOL(NSIndexPath *indexPath, NSString *text) {
40 | return text.length < 3;
41 | }] setRowHeight:100];
42 |
43 | self.tableView.data = dataBlock();
44 |
45 | UIBarButtonItem *reloadItem = [[UIBarButtonItem alloc] init];
46 | reloadItem.title = @"reload";
47 | reloadItem.tintColor = [UIColor blueColor];
48 | UIBarButtonItem *autoReloadItem = [[UIBarButtonItem alloc] init];
49 | autoReloadItem.title = @"autoReload";
50 | autoReloadItem.tintColor = [UIColor blueColor];
51 | UIBarButtonItem *newDataItem = [[UIBarButtonItem alloc] init];
52 | newDataItem.title = @"newData";
53 | newDataItem.tintColor = [UIColor blueColor];
54 |
55 | @weakify(self)
56 | newDataItem.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
57 | @strongify(self)
58 | self.tableView.data = dataBlock();
59 | return [RACSignal empty];
60 | }];
61 |
62 | autoReloadItem.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(UIBarButtonItem *input) {
63 | @strongify(self)
64 | if ([input.tintColor isEqual:[UIColor lightGrayColor]]) {
65 | input.tintColor = [UIColor blueColor];
66 | self.tableView.autoReload = YES;
67 | } else {
68 | input.tintColor = [UIColor lightGrayColor];
69 | self.tableView.autoReload = NO;
70 | }
71 | return [RACSignal empty];
72 | }];
73 |
74 | reloadItem.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {
75 | @strongify(self)
76 | [self.tableView reloadData];
77 | return [RACSignal empty];
78 | }];
79 | self.navigationItem.rightBarButtonItems = @[reloadItem,autoReloadItem,newDataItem];
80 | }
81 |
82 | @end
83 |
--------------------------------------------------------------------------------
/DYKitDemo/module/controller/CellWithSectionViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // CellWithSectionViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/20.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "CellWithSectionViewController.h"
10 | #import "DYKit.h"
11 | #import "User.h"
12 | #import "OneTypeCellByNibTableViewCell.h"
13 | #import "BlueTableViewCell.h"
14 |
15 | @interface CellWithSectionViewController ()
16 | @property (weak, nonatomic) IBOutlet UITableView *tableView;
17 |
18 | @end
19 |
20 | @implementation CellWithSectionViewController
21 |
22 | - (void)viewDidLoad {
23 | [super viewDidLoad];
24 |
25 | [self.tableView assembly:^(UITableViewCell *cell, NSString *string, NSIndexPath *indexPath) {
26 | cell.textLabel.text = string;
27 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
28 | return indexPath.section == 0;
29 | }];
30 |
31 | [self.tableView assembly:^(OneTypeCellByNibTableViewCell *cell, User *user, NSIndexPath *indexPath) {
32 | cell.headImageView.image = [UIImage imageNamed:user.img];
33 | cell.headImageView.backgroundColor = user.sex == 0 ? [UIColor purpleColor] : [UIColor blackColor];
34 | cell.nameLabel.text = user.name;
35 | cell.ageLabel.text = user.age;
36 | cell.descLabel.text = user.desc;
37 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
38 | return indexPath.section == 1;
39 | } withPlug:OneTypeCellByNibTableViewCell.class];
40 |
41 | [self.tableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
42 | cell.textLabel.text = text;
43 | } fromSlot:^BOOL(NSIndexPath *indexPath, id model) {
44 | return indexPath.section == 2;
45 | } withPlug:BlueTableViewCell.class];
46 |
47 | [[[[self.tableView setSectionData:^NSArray *(NSDictionary *model, NSInteger section) {
48 | return model[@"data"];
49 | }] setTitleForHeaderInSection:^NSString *(UITableView *tableView, NSInteger section) {
50 | return [NSString stringWithFormat:@"这是第%ld个section", (long)section];
51 | }] setHeightForRowAtIndexPath:^CGFloat(UITableView *tableView, NSIndexPath *indexPath) {
52 | return indexPath.row == 1 ? 100 : tableView.rowHeight;
53 | }] setSectionHeaderHeight:50];
54 |
55 |
56 | User *user1 = [User new];
57 | User *user2 = [User new];
58 | User *user3 = [User new];
59 | user1.id = @"001";
60 | user1.name = @"jack";
61 | user1.img = @"head";
62 | user1.age = @"29";
63 | user1.desc = @"她喜欢黑色";
64 | user1.sex = 0;
65 | user2.id = @"002";
66 | user2.name = @"Pink man";
67 | user2.img = @"head";
68 | user2.age = @"18";
69 | user2.desc = @"白老师得意门生";
70 | user2.sex = 1;
71 | user3.id = @"003";
72 | user3.name = @"MR.white";
73 | user3.img = @"head";
74 | user3.age = @"43";
75 | user3.desc = @"平淡无奇的中学化学老师";
76 | user3.sex = 1;
77 |
78 | self.tableView.data = @[@{@"name":@"港台明星",@"data":@[@"刘德华",@"张学友",@"黎明",@"郭富城",@"郭德纲",@"郭敬明",@"黄晓明",@"柴静",@"宋祖德",@"大S",@"小S",@"欧阳娜娜",@"王力宏",@"周杰伦"]},
79 | @{@"name":@"大陆明星",@"data":@[user1,user2,user3]},
80 | @{@"name":@"动漫明星",@"data":@[@"机器猫",@"大熊",@"(●—●)",@"美少女战士",@"孙悟空",@"贝吉塔"]},
81 | ];
82 |
83 | }
84 |
85 | @end
86 |
--------------------------------------------------------------------------------
/DYKitDemo/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/DYKitDemo/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // DYKitDemo
4 | //
5 | // Created by DuYe on 2017/7/8.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "DYKit.h"
11 | #import "OneTypeCellViewController.h"
12 | #import "CellWithSectionAndRowViewController.h"
13 | #import "CellWithSectionViewController.h"
14 | #import "CellWithRowViewController.h"
15 | #import "DataSlotViewController.h"
16 | #import "DataSlotForHeightViewController.h"
17 | #import "EditActionsViewController.h"
18 | #import "SectionsViewController.h"
19 |
20 | @interface ViewController ()
21 | @property (weak, nonatomic) IBOutlet UITableView *homeTableView;
22 |
23 | @end
24 |
25 | @implementation ViewController
26 |
27 | - (void)viewDidLoad {
28 | [super viewDidLoad];
29 | [self homeTableViewSetUp];
30 | }
31 |
32 |
33 | - (void)homeTableViewSetUp {
34 |
35 | [self.homeTableView assembly:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
36 | //这个block充当了cellForRowAtIndexPath的作用
37 | cell.textLabel.text = text;
38 | }];
39 |
40 | self.homeTableView.data = @[@"固定一种自定义cell",
41 | @"指定section和row(或具体indexPath)设定cell",
42 | @"指定section进行cell设定",
43 | @"指定row进行cell设定",
44 | @"指定数据条件进行cell设定",
45 | @"指定模块进行高度设定",
46 | @"左滑出现按钮",
47 | @"多section的情况"];
48 |
49 | @weakify(self)
50 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
51 | return @(indexPath.row);
52 | }] filter:^BOOL(id _Nullable value) {
53 | return [value intValue] == 0;
54 | }] subscribeNext:^(id _Nullable x) {
55 | @strongify(self)
56 | [self.navigationController pushViewController:[[OneTypeCellViewController alloc] init] animated:YES];
57 | }];
58 |
59 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
60 | return @(indexPath.row);
61 | }] filter:^BOOL(id _Nullable value) {
62 | return [value intValue] == 1;
63 | }] subscribeNext:^(id _Nullable x) {
64 | @strongify(self)
65 | [self.navigationController pushViewController:[[CellWithSectionAndRowViewController alloc] init] animated:YES];
66 | }];
67 |
68 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
69 | return @(indexPath.row);
70 | }] filter:^BOOL(id _Nullable value) {
71 | return [value intValue] == 2;
72 | }] subscribeNext:^(id _Nullable x) {
73 | @strongify(self)
74 | [self.navigationController pushViewController:[[CellWithSectionViewController alloc] init] animated:YES];
75 | }];
76 |
77 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
78 | return @(indexPath.row);
79 | }] filter:^BOOL(id _Nullable value) {
80 | return [value intValue] == 3;
81 | }] subscribeNext:^(id _Nullable x) {
82 | @strongify(self)
83 | [self.navigationController pushViewController:[[CellWithRowViewController alloc] init] animated:YES];
84 | }];
85 |
86 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
87 | return @(indexPath.row);
88 | }] filter:^BOOL(id _Nullable value) {
89 | return [value intValue] == 4;
90 | }] subscribeNext:^(id _Nullable x) {
91 | @strongify(self)
92 | [self.navigationController pushViewController:[[DataSlotViewController alloc] init] animated:YES];
93 | }];
94 |
95 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
96 | return @(indexPath.row);
97 | }] filter:^BOOL(id _Nullable value) {
98 | return [value intValue] == 5;
99 | }] subscribeNext:^(id _Nullable x) {
100 | @strongify(self)
101 | [self.navigationController pushViewController:[[DataSlotForHeightViewController alloc] init] animated:YES];
102 | }];
103 |
104 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
105 | return @(indexPath.row);
106 | }] filter:^BOOL(id _Nullable value) {
107 | return [value intValue] == 6;
108 | }] subscribeNext:^(id _Nullable x) {
109 | @strongify(self)
110 | [self.navigationController pushViewController:[[EditActionsViewController alloc] init] animated:YES];
111 | }];
112 |
113 | [[[self.homeTableView.didSelectRowAtIndexPathSignal reduceEach:^id (UITableView *tableView ,NSIndexPath *indexPath){
114 | return @(indexPath.row);
115 | }] filter:^BOOL(id _Nullable value) {
116 | return [value intValue] == 7;
117 | }] subscribeNext:^(id _Nullable x) {
118 | @strongify(self)
119 | [self.navigationController pushViewController:[[SectionsViewController alloc] init] animated:YES];
120 | }];
121 |
122 | }
123 | @end
124 |
--------------------------------------------------------------------------------
/DYKit/UITableView+DYTableViewBinder.h:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+DYTableViewBinder.h
3 | // DYMVVMRAC
4 | //
5 | // Created by DuYe on 2017/6/30.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "DYTableViewAgent.h"
11 | #import "objc/runtime.h"
12 | #import "DYTableViewRowAction.h"
13 |
14 | @interface UITableView (DYTableViewBinder)
15 |
16 | #pragma 属性
17 |
18 | /**
19 | 隐形代理
20 | */
21 | @property (nonatomic, strong) DYTableViewAgent *agent;
22 |
23 | /**
24 | 是否在给data赋值后自动执行reload
25 | */
26 | @property (nonatomic) BOOL autoReload;
27 |
28 | - (NSArray *)data;
29 | - (void)setData:(NSArray *)data;
30 |
31 | - (UITableView*)setSectionData:(GetSectionData)block;
32 |
33 | #pragma 主要装配方法
34 | /**
35 | 所有cell为UItableViewCell
36 |
37 | @param block 装配用block
38 | @return 模块本体,可在返回后继续链式调用配置
39 | */
40 | - (DYTableViewModule*) assembly:(AssemblyBlock)block;
41 |
42 | /**
43 | 所有cell为参数plug所指的cell
44 |
45 | @param block 装配用block
46 | @param plug 装配用cell类型
47 | @return 模块本体,可在返回后继续链式调用配置
48 | */
49 | - (DYTableViewModule*) assembly:(AssemblyBlock)block withPlug:(Class)plug;
50 |
51 | /**
52 | 满足slotBlock条件的位置装配UItableViewCell
53 |
54 | @param assemblyBlock 装配用block
55 | @param slotBlock 装配条件block
56 | @return 模块本体,可在返回后继续链式调用配置
57 | */
58 | - (DYTableViewModule*) assembly:(AssemblyBlock)assemblyBlock fromSlot:(SlotBlock)slotBlock;
59 |
60 | /**
61 | 满足slotBlock条件的位置装配参数plug所指的cell
62 |
63 | @param assemblyBlock 装配用block
64 | @param slotBlock 装配条件block
65 | @param plug 装配用cell类型
66 | @return 模块本体,可在返回后继续链式调用配置
67 | */
68 | - (DYTableViewModule*) assembly:(AssemblyBlock)assemblyBlock fromSlot:(SlotBlock)slotBlock withPlug:(Class)plug;
69 |
70 |
71 | #pragma 配置用block
72 | - (UITableView*)setHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
73 | - (UITableView*)setEditActionsForRowAtIndexPath:(EditActionsForRowAtIndexPath)block;
74 | - (UITableView*)setShouldHighlightRowAtIndexPath:(BOOLTableViewIndexPath)block;
75 | - (UITableView*)setCanEditRowAtIndexPath:(BOOLTableViewIndexPath)block;
76 | - (UITableView*)setNumberOfRowsInSection:(NSIntegerTableViewIndexPath)block;
77 | //- (void)setCellForRowAtIndexPath:(UITableViewCellTableViewIndexPath)block;
78 | - (UITableView*)setNumberOfSectionsInTableView:(NSIntegerUITableView)block;
79 | - (UITableView*)setTitleForHeaderInSection:(NSStringTableViewNSInteger)block;
80 | - (UITableView*)setTitleForFooterInSection:(NSStringTableViewNSInteger)block;
81 | - (UITableView*)setCanMoveRowAtIndexPath:(BOOLTableViewIndexPath)block;
82 | - (UITableView*)setSectionIndexTitlesForTableView:(SectionIndexTitlesForTableView)block;
83 | - (UITableView*)setSectionForSectionIndexTitle:(NSIntegerUITableViewNSStringNSInteger)block;
84 | - (UITableView*)setHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
85 | - (UITableView*)setHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
86 | - (UITableView*)setEstimatedHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
87 | - (UITableView*)setEstimatedHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
88 | - (UITableView*)setEstimatedHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
89 | - (UITableView*)setViewForHeaderInSection:(UIViewTableViewNSInteger)block;
90 | - (UITableView*)setViewForFooterInSection:(UIViewTableViewNSInteger)block;
91 | - (UITableView*)setWillSelectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
92 | - (UITableView*)setWillDeselectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
93 | - (UITableView*)setEditingStyleForRowAtIndexPath:(UITableViewCellEditingStyleUITableViewNSIndexPath)block;
94 | //- (UITableView*)setTitleForDeleteConfirmationButtonForRowAtIndexPath:(NSStringTableViewIndexPath)block;
95 | - (UITableView*)setShouldIndentWhileEditingRowAtIndexPath:(BOOLTableViewIndexPath)block;
96 | - (UITableView*)setTargetIndexPathForMoveFromRowAtIndexPath:(NSIndexPathUITableViewNSIndexPathNSIndexPath)block;
97 | - (UITableView*)setIndentationLevelForRowAtIndexPath:(NSIntegerUITableViewNSIndexPath)block;
98 | - (UITableView*)setShouldShowMenuForRowAtIndexPath:(BOOLTableViewIndexPath)block;
99 | - (UITableView*)setCanPerformAction:(BOOLUITableViewSELNSIndexPath)block;
100 | - (UITableView*)setCanFocusRowAtIndexPath:(BOOLTableViewIndexPath)block;
101 | - (UITableView*)setShouldUpdateFocusInContext:(BOOLUITableViewFocusUpdateContext)block;
102 | - (UITableView*)setIndexPathForPreferredFocusedViewInTableView:(NSIndexPathUITableView)block;
103 |
104 | #pragma delegate方法
105 | - (RACSignal*)accessoryButtonTappedForRowWithIndexPathSignal;
106 | - (RACSignal*)didEndDisplayingCellSignal;
107 | - (RACSignal*)didEndDisplayingHeaderViewSignal;
108 | - (RACSignal*)didEndDisplayingFooterViewSignal;
109 | - (RACSignal*)didHighlightRowAtIndexPathSignal;
110 | - (RACSignal*)didUnhighlightRowAtIndexPathSignal;
111 | - (RACSignal*)didSelectRowAtIndexPathSignal;
112 | - (RACSignal*)didDeselectRowAtIndexPathSignal;
113 | - (RACSignal*)didEndEditingRowAtIndexPathSignal;
114 | - (RACSignal*)didUpdateFocusInContextSignal;
115 | - (RACSignal*)performActionSignal;
116 | - (RACSignal*)willBeginEditingRowAtIndexPathSignal;
117 | - (RACSignal*)willDisplayCellSignal;
118 | - (RACSignal*)willDisplayHeaderViewSignal;
119 | - (RACSignal*)willDisplayFooterViewSignal;
120 |
121 | #pragma DataSource方法
122 | - (RACSignal*)commitEditingStyleSignal;
123 | - (RACSignal*)moveRowAtIndexPathSignal;
124 |
125 |
126 |
127 | @end
128 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewAgent.h:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewDataSouce.h
3 | // DYMVVMRAC
4 | //
5 | // Created by DuYe on 2017/7/7.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "DYTableViewModule.h"
11 |
12 | #if __has_include("ReactiveCocoa.h")
13 | #import "ReactiveCocoa.h"
14 | #else
15 | #import
16 | #endif
17 |
18 | @interface DYTableViewAgent : NSObject
19 |
20 | @property (nonatomic, copy) NSArray *data;
21 | @property (nonatomic, strong) NSMutableArray *tableModuleLists;
22 | @property (nonatomic, strong) DYTableViewModule *defaultTableModule;
23 |
24 | typedef NSArray* (^GetSectionData)(id model,NSInteger section);
25 | @property (nonatomic, copy) GetSectionData getSectionData;
26 |
27 |
28 | #pragma 下面是自带的配置
29 | typedef CGFloat (^CGFloatTableViewIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
30 | @property (nonatomic, copy) CGFloatTableViewIndexPath heightForRowAtIndexPath;
31 | @property (nonatomic, copy) CGFloatTableViewIndexPath estimatedHeightForRowAtIndexPath;
32 |
33 | typedef CGFloat (^CGFloatTableViewNSInteger)(UITableView *tableView,NSInteger section);
34 | @property (nonatomic, copy) CGFloatTableViewNSInteger heightForHeaderInSection;
35 | @property (nonatomic, copy) CGFloatTableViewNSInteger heightForFooterInSection;
36 | @property (nonatomic, copy) CGFloatTableViewNSInteger estimatedHeightForHeaderInSection;
37 | @property (nonatomic, copy) CGFloatTableViewNSInteger estimatedHeightForFooterInSection;
38 |
39 | typedef NSArray *(^EditActionsForRowAtIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
40 | @property (nonatomic, copy) EditActionsForRowAtIndexPath editActionsForRowAtIndexPath;
41 |
42 | typedef BOOL (^BOOLTableViewIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
43 | @property (nonatomic, copy) BOOLTableViewIndexPath shouldHighlightRowAtIndexPath;
44 | @property (nonatomic, copy) BOOLTableViewIndexPath canEditRowAtIndexPath;
45 | @property (nonatomic, copy) BOOLTableViewIndexPath shouldIndentWhileEditingRowAtIndexPath;
46 | @property (nonatomic, copy) BOOLTableViewIndexPath shouldShowMenuForRowAtIndexPath;
47 | @property (nonatomic, copy) BOOLTableViewIndexPath canFocusRowAtIndexPath;
48 |
49 | typedef NSInteger (^NSIntegerTableViewIndexPath)(UITableView *tableView,NSInteger section);
50 | @property (nonatomic, copy) NSIntegerTableViewIndexPath numberOfRowsInSection;
51 |
52 | //typedef UITableViewCell *(^UITableViewCellTableViewIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
53 | //@property (nonatomic, copy) UITableViewCellTableViewIndexPath cellForRowAtIndexPath;
54 |
55 | typedef NSInteger (^NSIntegerUITableView)(UITableView *tableView);
56 | @property (nonatomic, copy) NSIntegerUITableView numberOfSectionsInTableView;
57 |
58 | typedef NSString *(^NSStringTableViewNSInteger)(UITableView *tableView,NSInteger section);
59 | @property (nonatomic, copy) NSStringTableViewNSInteger titleForHeaderInSection;
60 | @property (nonatomic, copy) NSStringTableViewNSInteger titleForFooterInSection;
61 |
62 |
63 | @property (nonatomic, copy) BOOLTableViewIndexPath canMoveRowAtIndexPath;
64 |
65 | typedef NSArray *(^SectionIndexTitlesForTableView)(UITableView *tableView);
66 | @property (nonatomic, copy) SectionIndexTitlesForTableView sectionIndexTitlesForTableView;
67 |
68 | typedef NSInteger (^NSIntegerUITableViewNSStringNSInteger)(UITableView *tableView,NSString *title,NSInteger index);
69 | @property (nonatomic, copy) NSIntegerUITableViewNSStringNSInteger sectionForSectionIndexTitle;
70 |
71 | typedef UIView *(^UIViewTableViewNSInteger)(UITableView *tableView,NSInteger section);
72 | @property (nonatomic, copy) UIViewTableViewNSInteger viewForHeaderInSection;
73 | @property (nonatomic, copy) UIViewTableViewNSInteger viewForFooterInSection;
74 |
75 | typedef NSIndexPath *(^NSIndexPathUITableViewNSIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
76 | @property (nonatomic, copy) NSIndexPathUITableViewNSIndexPath willSelectRowAtIndexPath;
77 | @property (nonatomic, copy) NSIndexPathUITableViewNSIndexPath willDeselectRowAtIndexPath;
78 |
79 | typedef UITableViewCellEditingStyle (^UITableViewCellEditingStyleUITableViewNSIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
80 | @property (nonatomic, copy) UITableViewCellEditingStyleUITableViewNSIndexPath editingStyleForRowAtIndexPath;
81 |
82 | typedef NSString *(^NSStringTableViewIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
83 | @property (nonatomic, copy) NSStringTableViewIndexPath titleForDeleteConfirmationButtonForRowAtIndexPath;
84 |
85 |
86 | typedef NSIndexPath *(^NSIndexPathUITableViewNSIndexPathNSIndexPath)(UITableView *tableView,NSIndexPath *sourceIndexPath,NSIndexPath *proposedDestinationIndexPath);
87 | @property (nonatomic, copy) NSIndexPathUITableViewNSIndexPathNSIndexPath targetIndexPathForMoveFromRowAtIndexPath;
88 |
89 | typedef NSInteger (^NSIntegerUITableViewNSIndexPath)(UITableView *tableView,NSIndexPath *indexPath);
90 | @property (nonatomic, copy) NSIntegerUITableViewNSIndexPath indentationLevelForRowAtIndexPath;
91 |
92 | typedef BOOL (^BOOLUITableViewSELNSIndexPath)(UITableView *tableView,SEL action,NSIndexPath *indexPath);
93 | @property (nonatomic, copy) BOOLUITableViewSELNSIndexPath canPerformAction;
94 |
95 | typedef BOOL (^BOOLUITableViewFocusUpdateContext)(UITableView *tableView,UITableViewFocusUpdateContext *context);
96 | @property (nonatomic, copy) BOOLUITableViewFocusUpdateContext shouldUpdateFocusInContext;
97 |
98 | typedef NSIndexPath *(^NSIndexPathUITableView)(UITableView *tableView);
99 | @property (nonatomic, copy) NSIndexPathUITableView indexPathForPreferredFocusedViewInTableView;
100 |
101 | @end
102 |
103 |
104 |
--------------------------------------------------------------------------------
/DYKitDemo/module/view/OneTypeCellByNibTableViewCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
35 |
41 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | DYKit
2 | ==============
3 | [](http://cocoapods.org/pods/DYKit)
4 | [](http://cocoadocs.org/docsets/DYKit)
5 | [](https://www.apple.com/nl/ios/)
6 |
7 | DYKit是一套使用了ReactiveObjC的系统控件封装库
8 |
9 | DYKit将UIkit中的大部分常用组件进行了封装,让这些控件不再使用delegate,datasource等而是可以通过block,RACSignal等形式进行控制,通过链式调用,很多控件从此可以通过一句代码完成。
10 |
11 | sample
12 | ==============
13 | #### 不需要delegate,datasource。你可以如此简单的创建一个tableView:
14 |
15 | ```objc
16 | [self.homeTableView assemblyWithAssemblyBlock:^(UITableViewCell *cell, NSString *text, NSIndexPath *indexPath) {
17 | //这个block充当了cellForRowAtIndexPath的作用
18 | cell.textLabel.text = text;
19 | }];
20 |
21 | //设定数据
22 | self.homeTableView.dy_data = @[@"标题1",@"标题2",@"标题3",@"标题4"];
23 | ```
24 | 1. `dy_data`是一个`NSArray`的属性。你只能给他绑定发送`NSArray`的`RACSignal`.当然你也可以像下面这样直接给他赋值。
25 | `self,homeTableView.dy_data = @[@"标题1",@"标题2",@"标题3",@"标题4"];`
26 | 2. `dy_data`中的每一个元素都会出现在上面那个`assemblyWithAssemblyBlock`中的第二个参数。你可以修改参数成任意类型,比如`model`或`videModel`甚至是`NSString`。
27 |
28 |
29 |
30 | #### 你可以使用下面的方法来创建不同类型的tableView:
31 |
32 | ```objc
33 | [self.tableView assemblyByReuseIdentifier:@"OneTypeCellByNibTableViewCell" withAssemblyBlock:^(OneTypeCellByNibTableViewCell *cell, User *user, NSIndexPath *indexPath) {
34 | cell.headImageView.image = [UIImage imageNamed:user.img];
35 | cell.headImageView.backgroundColor = user.sex == 0 ? [UIColor purpleColor] : [UIColor blackColor];
36 | cell.nameLabel.text = user.name;
37 | cell.ageLabel.text = user.age;
38 | cell.descLabel.text = user.desc;
39 | }];
40 |
41 |
42 | User *user1 = [User new];
43 | User *user2 = [User new];
44 | User *user3 = [User new];
45 |
46 | user1.id = @"001";
47 | user1.name = @"jack";
48 | user1.img = @"head";
49 | user1.age = @"29";
50 | user1.desc = @"她喜欢黑色";
51 | user1.sex = 0;
52 | user2.id = @"002";
53 | user2.name = @"Pink man";
54 | user2.img = @"head";
55 | user2.age = @"18";
56 | user2.desc = @"白老师得意门生";
57 | user2.sex = 1;
58 | user3.id = @"003";
59 | user3.name = @"MR.white";
60 | user3.img = @"head";
61 | user3.age = @"43";
62 | user3.desc = @"平淡无奇的中学化学老师";
63 | user3.sex = 1;
64 | self.tableView.dy_data = @[user1,user2,user3];
65 | ```
66 | 1. `reuseIdentifier`参数传入一个复用ID。用来自动注册cell和使用复用cell,可支持nib或class创建的cell。(优先寻找`reuseIdentifier`命名的xib文件,找到的情况下直接注册nibcell。找不到的情况下会使用`reuseIdentifier`作为类名的非nib创建cell)
67 |
68 |
69 | #### 当然你也可以使用下面这些方法来满足不同cell在同一个tableView或者不同的cetion下使用的需求
70 |
71 | ```objc
72 | /**
73 | 指定section和row进行cell设定
74 |
75 | @param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
76 | @param section 指定section位置
77 | @param row 指定row位置
78 | @param block cellForRowAtIndexPath的block
79 | @return 返回自身,用于链式调用
80 | */
81 | - (UITableView*) addReuseIdentifier:(NSString *)identifier FromSection:(int)section row:(int)row withAssemblyBlock:(AssemblyBlock)block;
82 |
83 | /**
84 | 指定section进行cell设定。默认本section下的cell全部按照block内容进行设定
85 |
86 | @param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
87 | @param section 指定section位置
88 | @param block cellForRowAtIndexPath的block
89 | @return 返回自身,用于链式调用
90 | */
91 | - (UITableView*) addReuseIdentifier:(NSString *)identifier FromSection:(int)section withAssemblyBlock:(AssemblyBlock)block;
92 |
93 | /**
94 | 指定row进行cell设定。默认只有一个section
95 |
96 | @param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
97 | @param row 指定row位置
98 | @param block cellForRowAtIndexPath的block
99 | @return 返回自身,用于链式调用
100 | */
101 | - (UITableView*) addReuseIdentifier:(NSString *)identifier FromRow:(int)row withAssemblyBlock:(AssemblyBlock)block;
102 |
103 | /**
104 | 指定具体的indexPath进行cell设定,可选择任意位置
105 |
106 | @param identifier cell的重用ID(使用cell的类名,可以是xib或者class创建)
107 | @param slotBlock 用于指定具体条件的block。通过对参数的indexPath进行判断,返回需要的具体位置
108 | @param cellBindBlock cellForRowAtIndexPath的block
109 | @return 返回自身,用于链式调用
110 | */
111 | - (UITableView*) addReuseIdentifier:(NSString *)identifier FromSlot:(SlotBlock)slotBlock withAssemblyBlock:(AssemblyBlock)cellBindBlock;
112 | ```
113 |
114 | #### 代理事件
115 | 你可以用这些方法获得你需要的代理事件的Signal
116 |
117 | ```objc
118 | #pragma delegate方法
119 | - (RACSignal*)accessoryButtonTappedForRowWithIndexPathSignal;
120 | - (RACSignal*)didEndDisplayingCellSignal;
121 | - (RACSignal*)didEndDisplayingHeaderViewSignal;
122 | - (RACSignal*)didEndDisplayingFooterViewSignal;
123 | - (RACSignal*)didHighlightRowAtIndexPathSignal;
124 | - (RACSignal*)didUnhighlightRowAtIndexPathSignal;
125 | - (RACSignal*)didSelectRowAtIndexPathSignal;
126 | - (RACSignal*)didDeselectRowAtIndexPathSignal;
127 | - (RACSignal*)didEndEditingRowAtIndexPathSignal;
128 | - (RACSignal*)didUpdateFocusInContextSignal;
129 | - (RACSignal*)performActionSignal;
130 | - (RACSignal*)willBeginEditingRowAtIndexPathSignal;
131 | - (RACSignal*)willDisplayCellSignal;
132 | - (RACSignal*)willDisplayHeaderViewSignal;
133 | - (RACSignal*)willDisplayFooterViewSignal;
134 |
135 | #pragma DataSource方法
136 | - (RACSignal*)commitEditingStyleSignal;
137 | - (RACSignal*)moveRowAtIndexPathSignal;
138 | ```
139 |
140 | #### 回调方法
141 | 你也可以通过传入block的方法来设置tableView的属性。名字和原来的那些一样
142 |
143 | ```objc
144 | #pragma 配置用block
145 | - (UITableView*)setHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
146 | - (UITableView*)setEditActionsForRowAtIndexPath:(EditActionsForRowAtIndexPath)block;
147 | - (UITableView*)setShouldHighlightRowAtIndexPath:(BOOLTableViewIndexPath)block;
148 | - (UITableView*)setCanEditRowAtIndexPath:(BOOLTableViewIndexPath)block;
149 | - (UITableView*)setNumberOfRowsInSection:(NSIntegerTableViewIndexPath)block;
150 | //- (void)setCellForRowAtIndexPath:(UITableViewCellTableViewIndexPath)block;
151 | - (UITableView*)setNumberOfSectionsInTableView:(NSIntegerUITableView)block;
152 | - (UITableView*)setTitleForHeaderInSection:(NSStringTableViewNSInteger)block;
153 | - (UITableView*)setTitleForFooterInSection:(NSStringTableViewNSInteger)block;
154 | - (UITableView*)setCanMoveRowAtIndexPath:(BOOLTableViewIndexPath)block;
155 | - (UITableView*)setSectionIndexTitlesForTableView:(SectionIndexTitlesForTableView)block;
156 | - (UITableView*)setSectionForSectionIndexTitle:(NSIntegerUITableViewNSStringNSInteger)block;
157 | - (UITableView*)setHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
158 | - (UITableView*)setHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
159 | - (UITableView*)setEstimatedHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block;
160 | - (UITableView*)setEstimatedHeightForHeaderInSection:(CGFloatTableViewNSInteger)block;
161 | - (UITableView*)setEstimatedHeightForFooterInSection:(CGFloatTableViewNSInteger)block;
162 | - (UITableView*)setViewForHeaderInSection:(UIViewTableViewNSInteger)block;
163 | - (UITableView*)setViewForFooterInSection:(UIViewTableViewNSInteger)block;
164 | - (UITableView*)setWillSelectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
165 | - (UITableView*)setWillDeselectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block;
166 | - (UITableView*)setEditingStyleForRowAtIndexPath:(UITableViewCellEditingStyleUITableViewNSIndexPath)block;
167 | - (UITableView*)setTitleForDeleteConfirmationButtonForRowAtIndexPath:(NSStringTableViewIndexPath)block;
168 | - (UITableView*)setShouldIndentWhileEditingRowAtIndexPath:(BOOLTableViewIndexPath)block;
169 | - (UITableView*)setTargetIndexPathForMoveFromRowAtIndexPath:(NSIndexPathUITableViewNSIndexPathNSIndexPath)block;
170 | - (UITableView*)setIndentationLevelForRowAtIndexPath:(NSIntegerUITableViewNSIndexPath)block;
171 | - (UITableView*)setShouldShowMenuForRowAtIndexPath:(BOOLTableViewIndexPath)block;
172 | - (UITableView*)setCanPerformAction:(BOOLUITableViewSELNSIndexPath)block;
173 | - (UITableView*)setCanFocusRowAtIndexPath:(BOOLTableViewIndexPath)block;
174 | - (UITableView*)setShouldUpdateFocusInContext:(BOOLUITableViewFocusUpdateContext)block;
175 | - (UITableView*)setIndexPathForPreferredFocusedViewInTableView:(NSIndexPathUITableView)block;
176 |
177 | ```
178 |
179 |
180 |
181 |
182 |
183 |
184 | 安装
185 | ==============
186 |
187 | ### CocoaPods
188 |
189 | 1. 在 Podfile 中添加 `pod 'DYKit'`。
190 | 2. 执行 `pod install` 或 `pod update`。
191 | 3. 导入 \"DYKit.h\"。
192 |
193 | 将来
194 | ==============
195 | 1. 实现UIcollectionView的封装
196 | 2. 实现UITextView的封装
197 |
198 | 系统要求
199 | ==============
200 | 该项目最低支持 `iOS 8.0`。
201 |
202 | 许可证
203 | ==============
204 | DYKit 使用 MIT 许可证,详情见 LICENSE 文件。
205 |
206 |
207 |
--------------------------------------------------------------------------------
/DYKit/UITableView+DYTableViewBinder.m:
--------------------------------------------------------------------------------
1 | //
2 | // UITableView+DYTableViewBinder.m
3 | // DYMVVMRAC
4 | //
5 | // Created by DuYe on 2017/6/30.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "UITableView+DYTableViewBinder.h"
10 |
11 | @implementation UITableView (DYTableViewBinder)
12 |
13 | #pragma 属性
14 | DYSYNTH_DYNAMIC_PROPERTY_OBJECT(agent, setAgent, RETAIN, DYTableViewAgent *)
15 | DYSYNTH_DYNAMIC_PROPERTY_CTYPE(autoReload, setAutoReload, BOOL)
16 |
17 | - (NSArray *)data{return self.agent.data;}
18 | - (void)setData:(NSArray *)data{self.agent.data = data;}
19 |
20 | - (UITableView*)setSectionData:(GetSectionData)block{
21 | self.agent.getSectionData = block;
22 | return self;
23 | }
24 |
25 | #pragma 主要装配方法
26 | - (DYTableViewModule*) assembly:(AssemblyBlock)block{
27 | return [self assembly:block withPlug:UITableViewCell.class];
28 | }
29 |
30 | - (DYTableViewModule*) assembly:(AssemblyBlock)block withPlug:(Class)plug{
31 | [self agentInitialize];
32 | [self dyRegisterForCellReuseIdentifier:NSStringFromClass(plug)];
33 | self.agent.defaultTableModule.reuseIdentifier = NSStringFromClass(plug);
34 | self.agent.defaultTableModule.assemblyBlock = block;
35 | return self.agent.defaultTableModule;
36 | }
37 |
38 | - (DYTableViewModule*) assembly:(AssemblyBlock)assemblyBlock fromSlot:(SlotBlock)slotBlock{
39 | return [self assembly:assemblyBlock fromSlot:slotBlock withPlug:UITableViewCell.class];
40 | }
41 |
42 | - (DYTableViewModule*) assembly:(AssemblyBlock)assemblyBlock fromSlot:(SlotBlock)slotBlock withPlug:(Class)plug{
43 | [self agentInitialize];
44 | [self dyRegisterForCellReuseIdentifier:NSStringFromClass(plug)];
45 | DYTableViewModule *module = [[DYTableViewModule alloc] init];
46 | module.reuseIdentifier = NSStringFromClass(plug);
47 | module.slotBlock = slotBlock;
48 | module.assemblyBlock = assemblyBlock;
49 |
50 | NSUInteger __block count = self.agent.tableModuleLists.count;
51 | [self.agent.tableModuleLists addObject:module];
52 | @weakify(self)
53 | [RACObserve(module, self) subscribeNext:^(id _Nullable x) {
54 | @strongify(self)
55 | [self.agent.tableModuleLists replaceObjectAtIndex:count withObject:module];
56 | }];
57 |
58 | return module;
59 | }
60 |
61 | - (void)agentInitialize{
62 | if (!self.agent) {
63 | self.agent = [[DYTableViewAgent alloc] init];
64 | self.dataSource = self.agent;
65 | self.delegate = self.agent;
66 | self.autoReload = YES;
67 |
68 | @weakify(self)
69 | RACDisposable __block *reloadDataDisposable = [[RACObserve(self, agent.data) skip:1] subscribeNext:^(id _Nullable x) {
70 | @strongify(self)
71 | [self reloadData];
72 | }];
73 |
74 | [[[RACObserve(self, autoReload) skip:1] filter:^BOOL(id _Nullable value) {
75 | return [value boolValue] == NO;
76 | }] subscribeNext:^(id _Nullable x) {
77 | [reloadDataDisposable dispose];
78 | }];
79 |
80 | [[[RACObserve(self, autoReload) skip:1] filter:^BOOL(id _Nullable value) {
81 | return [value boolValue] == YES;
82 | }] subscribeNext:^(id _Nullable x) {
83 | @strongify(self)
84 | @weakify(self)
85 | reloadDataDisposable = [[RACObserve(self, agent.data) skip:1] subscribeNext:^(id _Nullable x) {
86 | @strongify(self)
87 | [self reloadData];
88 | }];
89 | }];
90 | }
91 | }
92 |
93 | - (void)dyRegisterForCellReuseIdentifier:(NSString *)identifier{
94 | if ([[NSBundle mainBundle] pathForResource:identifier ofType:@"nib"]) {
95 | [self registerNib:[UINib nibWithNibName:identifier bundle:nil] forCellReuseIdentifier:identifier];
96 | } else {
97 | [self registerClass:NSClassFromString(identifier) forCellReuseIdentifier:identifier];
98 | }
99 | }
100 |
101 | #pragma 配置用block
102 | - (UITableView*)setHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block{[self agentInitialize];self.agent.heightForRowAtIndexPath = block;return self;}
103 | - (UITableView*)setEditActionsForRowAtIndexPath:(EditActionsForRowAtIndexPath)block{[self agentInitialize];self.agent.editActionsForRowAtIndexPath = block;return self;}
104 | - (UITableView*)setShouldHighlightRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.shouldHighlightRowAtIndexPath = block;return self;}
105 | - (UITableView*)setCanEditRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.canEditRowAtIndexPath = block;return self;}
106 | - (UITableView*)setNumberOfRowsInSection:(NSIntegerTableViewIndexPath)block{[self agentInitialize];self.agent.numberOfRowsInSection = block;return self;}
107 | //- (void)setCellForRowAtIndexPath:(UITableViewCellTableViewIndexPath)block{self.agent.cellForRowAtIndexPath = block;}
108 | - (UITableView*)setNumberOfSectionsInTableView:(NSIntegerUITableView)block{[self agentInitialize];self.agent.numberOfSectionsInTableView = block;return self;}
109 | - (UITableView*)setTitleForHeaderInSection:(NSStringTableViewNSInteger)block{[self agentInitialize];self.agent.titleForHeaderInSection = block;return self;}
110 | - (UITableView*)setTitleForFooterInSection:(NSStringTableViewNSInteger)block{[self agentInitialize];self.agent.titleForFooterInSection = block;return self;}
111 | - (UITableView*)setCanMoveRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.canMoveRowAtIndexPath = block;return self;}
112 | - (UITableView*)setSectionIndexTitlesForTableView:(SectionIndexTitlesForTableView)block{[self agentInitialize];self.agent.sectionIndexTitlesForTableView = block;return self;}
113 | - (UITableView*)setSectionForSectionIndexTitle:(NSIntegerUITableViewNSStringNSInteger)block{[self agentInitialize];self.agent.sectionForSectionIndexTitle = block;return self;}
114 | - (UITableView*)setHeightForHeaderInSection:(CGFloatTableViewNSInteger)block{[self agentInitialize];self.agent.heightForHeaderInSection = block;return self;}
115 | - (UITableView*)setHeightForFooterInSection:(CGFloatTableViewNSInteger)block{[self agentInitialize];self.agent.heightForFooterInSection = block;return self;}
116 | - (UITableView*)setEstimatedHeightForRowAtIndexPath:(CGFloatTableViewIndexPath)block{[self agentInitialize];self.agent.estimatedHeightForRowAtIndexPath = block;return self;}
117 | - (UITableView*)setEstimatedHeightForHeaderInSection:(CGFloatTableViewNSInteger)block{[self agentInitialize];self.agent.estimatedHeightForHeaderInSection = block;return self;}
118 | - (UITableView*)setEstimatedHeightForFooterInSection:(CGFloatTableViewNSInteger)block{[self agentInitialize];self.agent.estimatedHeightForFooterInSection = block;return self;}
119 | - (UITableView*)setViewForHeaderInSection:(UIViewTableViewNSInteger)block{[self agentInitialize];self.agent.viewForHeaderInSection = block;return self;}
120 | - (UITableView*)setViewForFooterInSection:(UIViewTableViewNSInteger)block{[self agentInitialize];self.agent.viewForFooterInSection = block;return self;}
121 | - (UITableView*)setWillSelectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block{[self agentInitialize];self.agent.willSelectRowAtIndexPath = block;return self;}
122 | - (UITableView*)setWillDeselectRowAtIndexPath:(NSIndexPathUITableViewNSIndexPath)block{[self agentInitialize];self.agent.willDeselectRowAtIndexPath = block;return self;}
123 | - (UITableView*)setEditingStyleForRowAtIndexPath:(UITableViewCellEditingStyleUITableViewNSIndexPath)block{[self agentInitialize];self.agent.editingStyleForRowAtIndexPath = block;return self;}
124 | //- (UITableView*)setTitleForDeleteConfirmationButtonForRowAtIndexPath:(NSStringTableViewIndexPath)block{[self agentInitialize];self.agent.titleForDeleteConfirmationButtonForRowAtIndexPath = block;return self;}
125 | - (UITableView*)setShouldIndentWhileEditingRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.shouldIndentWhileEditingRowAtIndexPath = block;return self;}
126 | - (UITableView*)setTargetIndexPathForMoveFromRowAtIndexPath:(NSIndexPathUITableViewNSIndexPathNSIndexPath)block{[self agentInitialize];self.agent.targetIndexPathForMoveFromRowAtIndexPath = block;return self;}
127 | - (UITableView*)setIndentationLevelForRowAtIndexPath:(NSIntegerUITableViewNSIndexPath)block{[self agentInitialize];self.agent.indentationLevelForRowAtIndexPath = block;return self;}
128 | - (UITableView*)setShouldShowMenuForRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.shouldShowMenuForRowAtIndexPath = block;return self;}
129 | - (UITableView*)setCanPerformAction:(BOOLUITableViewSELNSIndexPath)block{[self agentInitialize];self.agent.canPerformAction = block;return self;}
130 | - (UITableView*)setCanFocusRowAtIndexPath:(BOOLTableViewIndexPath)block{[self agentInitialize];self.agent.canFocusRowAtIndexPath = block;return self;}
131 | - (UITableView*)setShouldUpdateFocusInContext:(BOOLUITableViewFocusUpdateContext)block{[self agentInitialize];self.agent.shouldUpdateFocusInContext = block;return self;}
132 | - (UITableView*)setIndexPathForPreferredFocusedViewInTableView:(NSIndexPathUITableView)block{[self agentInitialize];self.agent.indexPathForPreferredFocusedViewInTableView = block;return self;}
133 |
134 | #pragma delegate方法
135 | - (RACSignal*)accessoryButtonTappedForRowWithIndexPathSignal{
136 | [self agentInitialize];
137 | return [self.agent rac_signalForSelector:@selector(tableView:accessoryButtonTappedForRowWithIndexPath:)];
138 | }
139 | - (RACSignal*)didEndDisplayingCellSignal{
140 | [self agentInitialize];
141 | return [self.agent rac_signalForSelector:@selector(tableView:didEndDisplayingCell:forRowAtIndexPath:)];
142 | }
143 | - (RACSignal*)didEndDisplayingHeaderViewSignal{
144 | [self agentInitialize];
145 | return [self.agent rac_signalForSelector:@selector(tableView:didEndDisplayingHeaderView:forSection:)];
146 | }
147 | - (RACSignal*)didEndDisplayingFooterViewSignal{
148 | [self agentInitialize];
149 | return [self.agent rac_signalForSelector:@selector(tableView:didEndDisplayingFooterView:forSection:)];
150 | }
151 | - (RACSignal*)didHighlightRowAtIndexPathSignal{
152 | [self agentInitialize];
153 | return [self.agent rac_signalForSelector:@selector(tableView:didHighlightRowAtIndexPath:)];
154 | }
155 | - (RACSignal*)didUnhighlightRowAtIndexPathSignal{
156 | [self agentInitialize];
157 | return [self.agent rac_signalForSelector:@selector(tableView:didUnhighlightRowAtIndexPath:)];
158 | }
159 | - (RACSignal*)didSelectRowAtIndexPathSignal{
160 | [self agentInitialize];
161 | return [self.agent rac_signalForSelector:@selector(tableView:didSelectRowAtIndexPath:)];
162 | }
163 | - (RACSignal*)didDeselectRowAtIndexPathSignal{
164 | [self agentInitialize];
165 | return [self.agent rac_signalForSelector:@selector(tableView:didDeselectRowAtIndexPath:)];
166 | }
167 | - (RACSignal*)didEndEditingRowAtIndexPathSignal{
168 | [self agentInitialize];
169 | return [self.agent rac_signalForSelector:@selector(tableView:didEndEditingRowAtIndexPath:)];
170 | }
171 | - (RACSignal*)didUpdateFocusInContextSignal{
172 | [self agentInitialize];
173 | return [self.agent rac_signalForSelector:@selector(tableView:didUpdateFocusInContext:withAnimationCoordinator:)];
174 | }
175 | - (RACSignal*)performActionSignal{
176 | [self agentInitialize];
177 | return [self.agent rac_signalForSelector:@selector(tableView:performAction:forRowAtIndexPath:withSender:)];
178 | }
179 | - (RACSignal*)willBeginEditingRowAtIndexPathSignal{
180 | [self agentInitialize];
181 | return [self.agent rac_signalForSelector:@selector(tableView:willBeginEditingRowAtIndexPath:)];
182 | }
183 | - (RACSignal*)willDisplayCellSignal{
184 | [self agentInitialize];
185 | return [self.agent rac_signalForSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:)];
186 | }
187 | - (RACSignal*)willDisplayHeaderViewSignal{
188 | [self agentInitialize];
189 | return [self.agent rac_signalForSelector:@selector(tableView:willDisplayHeaderView:forSection:)];
190 | }
191 | - (RACSignal*)willDisplayFooterViewSignal{
192 | [self agentInitialize];
193 | return [self.agent rac_signalForSelector:@selector(tableView:willDisplayFooterView:forSection:)];
194 | }
195 |
196 | #pragma DataSource方法
197 | - (RACSignal*)commitEditingStyleSignal{
198 | [self agentInitialize];
199 | return [self.agent rac_signalForSelector:@selector(tableView:commitEditingStyle:forRowAtIndexPath:)];
200 | }
201 | - (RACSignal*)moveRowAtIndexPathSignal{
202 | [self agentInitialize];
203 | return [self.agent rac_signalForSelector:@selector(tableView:moveRowAtIndexPath:toIndexPath:)];
204 | }
205 |
206 | @end
207 |
--------------------------------------------------------------------------------
/DYKit/DYTableViewAgent.m:
--------------------------------------------------------------------------------
1 | //
2 | // DYTableViewDataSouce.m
3 | // DYMVVMRAC
4 | //
5 | // Created by DuYe on 2017/7/7.
6 | // Copyright © 2017年 DuYe. All rights reserved.
7 | //
8 |
9 | #import "DYTableViewAgent.h"
10 |
11 | @implementation DYTableViewAgent
12 |
13 | #pragma lazyProperties
14 | DYN_LAZY(tableModuleLists, NSMutableArray)
15 | - (DYTableViewModule *)defaultTableModule
16 | {
17 | return DY_LAZY(_defaultTableModule,({
18 | DYTableViewModule *module = [[DYTableViewModule alloc] init];
19 | module.reuseIdentifier = @"UITableViewCell";
20 | module.slotBlock = ^BOOL(NSIndexPath *indexPath, id model) {return YES;};
21 | module;
22 | }));
23 | }
24 |
25 | #pragma dataSource
26 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
27 | //第一优先级 用户局部block定制
28 | if (self.numberOfRowsInSection) {
29 | return self.numberOfRowsInSection(tableView, section);
30 | }
31 | //第二优先级 sectionData
32 | if (self.getSectionData) {
33 | return self.getSectionData(self.data[section],section).count;
34 | }
35 | //第三优先级 默认值
36 | return self.data.count;
37 | }
38 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
39 | UITableViewCell *cell;
40 | if (self.getSectionData) {
41 | for (DYTableViewModule *module in self.tableModuleLists) {
42 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
43 | cell = [tableView dequeueReusableCellWithIdentifier:module.reuseIdentifier];
44 | module.assemblyBlock(cell, self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row], indexPath);
45 | return cell;
46 | }
47 | }
48 | } else {
49 | for (DYTableViewModule *module in self.tableModuleLists) {
50 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
51 | cell = [tableView dequeueReusableCellWithIdentifier:module.reuseIdentifier];
52 | module.assemblyBlock(cell, self.data[indexPath.row], indexPath);
53 | return cell;
54 | }
55 | }
56 | }
57 |
58 | cell = [tableView dequeueReusableCellWithIdentifier:self.defaultTableModule.reuseIdentifier];
59 |
60 | if (self.getSectionData) {
61 | self.defaultTableModule.assemblyBlock(cell, self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row], indexPath);
62 | return cell;
63 | } else {
64 | self.defaultTableModule.assemblyBlock(cell, self.data[indexPath.row], indexPath);
65 | return cell;
66 | }
67 | }
68 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
69 | //第一优先级 用户局部block定制
70 | if (self.numberOfSectionsInTableView) {
71 | return self.numberOfSectionsInTableView(tableView);
72 | }
73 | //第二优先级 sectionData
74 | if (self.getSectionData) {
75 | return self.data.count;
76 | }
77 | //第三优先级 默认值
78 | return 1;
79 | }
80 | - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
81 | //第一优先级 用户局部block定制
82 | if (self.canEditRowAtIndexPath) {
83 | return self.canEditRowAtIndexPath(tableView, indexPath);
84 | }
85 | //第二优先级 用户局部定制
86 | if (self.getSectionData) {
87 | for (DYTableViewModule *module in self.tableModuleLists) {
88 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
89 | if (module.editing) {
90 | return module.editing;
91 | }
92 | }
93 | }
94 | } else {
95 | for (DYTableViewModule *module in self.tableModuleLists) {
96 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
97 | if (module.editing) {
98 | return module.editing;
99 | }
100 | }
101 | }
102 | }
103 | //第三优先级 默认全局定制
104 | if (self.defaultTableModule) {
105 | return self.defaultTableModule.editing;
106 | }
107 | //第四优先级 默认值
108 | return tableView.editing;
109 | }
110 | - (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
111 | return self.titleForHeaderInSection ? self.titleForHeaderInSection(tableView,section) : nil;
112 | }
113 | - (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
114 | return self.titleForFooterInSection ? self.titleForFooterInSection(tableView,section) : nil;
115 | }
116 | - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{
117 | return self.canMoveRowAtIndexPath ? self.canMoveRowAtIndexPath(tableView,indexPath) : NO;
118 | }
119 | - (nullable NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
120 | return self.sectionIndexTitlesForTableView ? self.sectionIndexTitlesForTableView(tableView) : nil;
121 | }
122 | - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
123 | return self.sectionForSectionIndexTitle ? self.sectionForSectionIndexTitle(tableView,title,index) : 0;
124 | }
125 |
126 |
127 | #pragma delegate
128 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
129 | //第一优先级 用户局部block定制
130 | if (self.heightForRowAtIndexPath) {
131 | return self.heightForRowAtIndexPath(tableView, indexPath);
132 | }
133 | //第二优先级 用户局部定制
134 | if (self.getSectionData) {
135 | for (DYTableViewModule *module in self.tableModuleLists) {
136 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
137 | if (module.rowHeight) {
138 | return module.rowHeight;
139 | }
140 | }
141 | }
142 | } else {
143 | for (DYTableViewModule *module in self.tableModuleLists) {
144 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
145 | if (module.rowHeight) {
146 | return module.rowHeight;
147 | }
148 | }
149 | }
150 | }
151 | //第三优先级 默认全局定制
152 | if (self.defaultTableModule) {
153 | if (self.defaultTableModule.rowHeight) {
154 | return self.defaultTableModule.rowHeight;
155 | }
156 | }
157 | //第四优先级 默认值
158 | return tableView.rowHeight;
159 | }
160 | - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
161 | return self.heightForHeaderInSection ? self.heightForHeaderInSection(tableView,section) : tableView.sectionHeaderHeight;
162 | }
163 | - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
164 | return self.heightForFooterInSection ? self.heightForFooterInSection(tableView,section) : tableView.sectionFooterHeight;
165 | }
166 | - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0){
167 | //第一优先级 用户局部block定制
168 | if (self.estimatedHeightForRowAtIndexPath) {
169 | return self.estimatedHeightForRowAtIndexPath(tableView, indexPath);
170 | }
171 | //第二优先级 用户局部定制
172 | if (self.getSectionData) {
173 | for (DYTableViewModule *module in self.tableModuleLists) {
174 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
175 | if (module.estimatedHeight) {
176 | return module.estimatedHeight;
177 | }
178 | }
179 | }
180 | } else {
181 | for (DYTableViewModule *module in self.tableModuleLists) {
182 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
183 | if (module.estimatedHeight) {
184 | return module.estimatedHeight;
185 | }
186 | }
187 | }
188 | }
189 | //第三优先级 默认全局定制
190 | if (self.defaultTableModule) {
191 | if (self.defaultTableModule.estimatedHeight) {
192 | return self.defaultTableModule.estimatedHeight;
193 | }
194 | }
195 | //第四优先级 默认值
196 | return [self tableView:tableView heightForRowAtIndexPath:indexPath];
197 | }
198 | - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0){
199 | return self.estimatedHeightForHeaderInSection ? self.estimatedHeightForHeaderInSection(tableView,section) : [self tableView:tableView heightForHeaderInSection:section];
200 | }
201 | - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0){
202 | return self.estimatedHeightForFooterInSection ? self.estimatedHeightForFooterInSection(tableView,section) : [self tableView:tableView heightForFooterInSection:section];
203 | }
204 | - (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
205 | return self.viewForHeaderInSection ? self.viewForHeaderInSection(tableView,section) : nil;
206 | }
207 | - (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
208 | return self.viewForFooterInSection ? self.viewForFooterInSection(tableView,section) : nil;
209 | }
210 | - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0){
211 | return self.shouldHighlightRowAtIndexPath ? self.shouldHighlightRowAtIndexPath(tableView,indexPath) : YES;
212 | }
213 | - (nullable NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
214 | return self.willSelectRowAtIndexPath ? self.willSelectRowAtIndexPath(tableView,indexPath) : indexPath;
215 | }
216 | - (nullable NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0){
217 | return self.willDeselectRowAtIndexPath ? self.willDeselectRowAtIndexPath(tableView,indexPath) : indexPath;
218 | }
219 |
220 | - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
221 | if ([self tableView:tableView canEditRowAtIndexPath:indexPath ]) {
222 | //第一优先级 用户局部block定制
223 | if (self.editingStyleForRowAtIndexPath) {
224 | return self.editingStyleForRowAtIndexPath(tableView, indexPath);
225 | }
226 | //第二优先级 用户局部定制
227 | if (self.getSectionData) {
228 | for (DYTableViewModule *module in self.tableModuleLists) {
229 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
230 | if (module.editingStyle) {
231 | return module.editingStyle;
232 | }
233 | }
234 | }
235 | } else {
236 | for (DYTableViewModule *module in self.tableModuleLists) {
237 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
238 | if (module.editingStyle) {
239 | return module.editingStyle;
240 | }
241 | }
242 | }
243 | }
244 | //第三优先级 默认全局定制
245 | if (self.defaultTableModule) {
246 | if (self.defaultTableModule.editingStyle) {
247 | return self.defaultTableModule.editingStyle;
248 | }
249 | }
250 |
251 | return UITableViewCellEditingStyleDelete;
252 | }
253 | //第四优先级 默认值
254 | return UITableViewCellEditingStyleNone;
255 | }
256 |
257 |
258 |
259 |
260 | //- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED{
261 | // return self.titleForDeleteConfirmationButtonForRowAtIndexPath ? self.titleForDeleteConfirmationButtonForRowAtIndexPath(tableView,indexPath) : nil;
262 | //}
263 |
264 |
265 |
266 |
267 | - (nullable NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED{
268 | //第一优先级 用户局部block定制
269 | if (self.editActionsForRowAtIndexPath) {
270 | return self.editActionsForRowAtIndexPath(tableView,indexPath);
271 | }
272 | //第二优先级 用户局部定制
273 | if (self.getSectionData) {
274 | for (DYTableViewModule *module in self.tableModuleLists) {
275 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
276 | if (module.editActions) {
277 | NSMutableArray *array = [[NSMutableArray alloc] init];
278 | for (DYTableViewRowAction *dyAction in module.editActions) {
279 | [array addObject:[UITableViewRowAction rowActionWithStyle:dyAction.accessibilityPerformMagicTap title:dyAction.title handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
280 | dyAction.handler(action, self.data[indexPath.row], indexPath);
281 | }]];
282 | }
283 | return array;
284 | }
285 | }
286 | }
287 | } else {
288 | for (DYTableViewModule *module in self.tableModuleLists) {
289 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
290 | if (module.editActions) {
291 | NSMutableArray *array = [[NSMutableArray alloc] init];
292 | for (DYTableViewRowAction *dyAction in module.editActions) {
293 | [array addObject:[UITableViewRowAction rowActionWithStyle:dyAction.accessibilityPerformMagicTap title:dyAction.title handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
294 | dyAction.handler(action, self.data[indexPath.row], indexPath);
295 | }]];
296 | }
297 | return array;
298 | }
299 | }
300 | }
301 | }
302 | //第三优先级 默认全局定制
303 | if (self.defaultTableModule) {
304 | if (self.defaultTableModule.editActions) {
305 | NSMutableArray *array = [[NSMutableArray alloc] init];
306 | for (DYTableViewRowAction *dyAction in self.defaultTableModule.editActions) {
307 | [array addObject:[UITableViewRowAction rowActionWithStyle:dyAction.accessibilityPerformMagicTap title:dyAction.title handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
308 | dyAction.handler(action, self.data[indexPath.row], indexPath);
309 | }]];
310 | }
311 | return array;
312 | }
313 | }
314 | //第四优先级 默认值
315 | return nil;
316 | }
317 |
318 | - (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath{
319 | return self.shouldIndentWhileEditingRowAtIndexPath ? self.shouldIndentWhileEditingRowAtIndexPath(tableView,indexPath) : YES;
320 | }
321 | - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath{
322 | return self.targetIndexPathForMoveFromRowAtIndexPath ? self.targetIndexPathForMoveFromRowAtIndexPath(tableView,sourceIndexPath,proposedDestinationIndexPath) : proposedDestinationIndexPath;
323 | }
324 | - (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath{
325 | //第一优先级 用户局部block定制
326 | if (self.indentationLevelForRowAtIndexPath) {
327 | return self.indentationLevelForRowAtIndexPath(tableView, indexPath);
328 | }
329 | //第二优先级 用户局部定制
330 | if (self.getSectionData) {
331 | for (DYTableViewModule *module in self.tableModuleLists) {
332 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
333 | if (module.indentationLevel) {
334 | return module.indentationLevel;
335 | }
336 | }
337 | }
338 | } else {
339 | for (DYTableViewModule *module in self.tableModuleLists) {
340 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
341 | if (module.indentationLevel) {
342 | return module.indentationLevel;
343 | }
344 | }
345 | }
346 | }
347 | //第三优先级 默认全局定制
348 | if (self.defaultTableModule) {
349 | if (self.defaultTableModule.indentationLevel) {
350 | return self.defaultTableModule.indentationLevel;
351 | }
352 | }
353 | //第四优先级 默认值
354 | return 0;
355 | }
356 | - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(5_0){
357 | //第一优先级 用户局部block定制
358 | if (self.shouldShowMenuForRowAtIndexPath) {
359 | return self.shouldShowMenuForRowAtIndexPath(tableView, indexPath);
360 | }
361 | //第二优先级 用户局部定制
362 | if (self.getSectionData) {
363 | for (DYTableViewModule *module in self.tableModuleLists) {
364 | if (module.slotBlock(indexPath,self.getSectionData(self.data[indexPath.section],indexPath.section)[indexPath.row])) {
365 | if (module.shouldShowMenu) {
366 | return module.shouldShowMenu;
367 | }
368 | }
369 | }
370 | } else {
371 | for (DYTableViewModule *module in self.tableModuleLists) {
372 | if (module.slotBlock(indexPath,self.data[indexPath.row])) {
373 | if (module.shouldShowMenu) {
374 | return module.shouldShowMenu;
375 | }
376 | }
377 | }
378 | }
379 | //第三优先级 默认全局定制
380 | if (self.defaultTableModule) {
381 | if (self.defaultTableModule.shouldShowMenu) {
382 | return self.defaultTableModule.shouldShowMenu;
383 | }
384 | }
385 | //第四优先级 默认值
386 | return NO;
387 | }
388 | - (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender NS_AVAILABLE_IOS(5_0){
389 | return self.canPerformAction ? self.canPerformAction(tableView,action,indexPath) : NO;
390 | }
391 | - (BOOL)tableView:(UITableView *)tableView canFocusRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(9_0){
392 | return self.canFocusRowAtIndexPath ? self.canFocusRowAtIndexPath(tableView,indexPath) : NO;
393 | }
394 | - (BOOL)tableView:(UITableView *)tableView shouldUpdateFocusInContext:(UITableViewFocusUpdateContext *)context NS_AVAILABLE_IOS(9_0){
395 | return self.shouldUpdateFocusInContext ? self.shouldUpdateFocusInContext(tableView,context) : NO;
396 | }
397 | - (nullable NSIndexPath *)indexPathForPreferredFocusedViewInTableView:(UITableView *)tableView NS_AVAILABLE_IOS(9_0){
398 | return self.indexPathForPreferredFocusedViewInTableView ? self.indexPathForPreferredFocusedViewInTableView(tableView) : nil;
399 | }
400 |
401 |
402 | - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{}
403 | - (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath NS_AVAILABLE_IOS(6_0){}
404 | - (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0){}
405 | - (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0){}
406 | - (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0){}
407 | - (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0){}
408 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{}
409 | - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0){}
410 | - (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(nullable NSIndexPath *)indexPath __TVOS_PROHIBITED{}
411 | - (void)tableView:(UITableView *)tableView didUpdateFocusInContext:(UITableViewFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator NS_AVAILABLE_IOS(9_0){}
412 | - (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(nullable id)sender NS_AVAILABLE_IOS(5_0){}
413 | - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath __TVOS_PROHIBITED{}
414 | - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{}
415 | - (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0){}
416 | - (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section NS_AVAILABLE_IOS(6_0){}
417 |
418 | #pragma 自定义方法
419 |
420 | //- (NSInteger)getFlattenRow:(UITableView *)tableView IndexPath:(NSIndexPath*) indexPath{
421 | // return indexPath.section == 0 ? indexPath.row : [self tableView:tableView numberOfRowsInSection:indexPath.section - 1] + [self getFlattenRow:tableView IndexPath:[NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section - 1]];
422 | //}
423 |
424 | @end
425 |
--------------------------------------------------------------------------------
/DYKitDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1DAE2CF01F5FC97200EE9905 /* EditActionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DAE2CEE1F5FC97200EE9905 /* EditActionsViewController.m */; };
11 | 1DAE2CF11F5FC97200EE9905 /* EditActionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DAE2CEF1F5FC97200EE9905 /* EditActionsViewController.xib */; };
12 | 1DAE2D011F62788200EE9905 /* DYTableViewRowAction.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DAE2D001F62788200EE9905 /* DYTableViewRowAction.m */; };
13 | 1DAE2D051F66301D00EE9905 /* SectionsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DAE2D031F66301D00EE9905 /* SectionsViewController.m */; };
14 | 1DAE2D061F66301D00EE9905 /* SectionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DAE2D041F66301D00EE9905 /* SectionsViewController.xib */; };
15 | 8D8A3769464DEA332C057D2C /* libPods-DYKitDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 73E844F4B5924AAEC7BA2DDF /* libPods-DYKitDemo.a */; };
16 | E3518E981F106B86008534B1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E3518E971F106B86008534B1 /* main.m */; };
17 | E3518E9B1F106B86008534B1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E3518E9A1F106B86008534B1 /* AppDelegate.m */; };
18 | E3518E9E1F106B86008534B1 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3518E9D1F106B86008534B1 /* ViewController.m */; };
19 | E3518EA11F106B86008534B1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3518E9F1F106B86008534B1 /* Main.storyboard */; };
20 | E3518EA31F106B86008534B1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E3518EA21F106B86008534B1 /* Assets.xcassets */; };
21 | E3518EA61F106B86008534B1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E3518EA41F106B86008534B1 /* LaunchScreen.storyboard */; };
22 | E3518EB11F106B86008534B1 /* DYKitDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E3518EB01F106B86008534B1 /* DYKitDemoTests.m */; };
23 | E35F5CEB1F205D52009ADC93 /* OneTypeCellViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E35F5CE91F205D52009ADC93 /* OneTypeCellViewController.m */; };
24 | E35F5CEC1F205D52009ADC93 /* OneTypeCellViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E35F5CEA1F205D52009ADC93 /* OneTypeCellViewController.xib */; };
25 | E35F5CF01F207B06009ADC93 /* CellWithSectionAndRowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E35F5CEE1F207B06009ADC93 /* CellWithSectionAndRowViewController.m */; };
26 | E35F5CF11F207B06009ADC93 /* CellWithSectionAndRowViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E35F5CEF1F207B06009ADC93 /* CellWithSectionAndRowViewController.xib */; };
27 | E35F5CF51F209466009ADC93 /* CellWithSectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E35F5CF31F209466009ADC93 /* CellWithSectionViewController.m */; };
28 | E35F5CF61F209466009ADC93 /* CellWithSectionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E35F5CF41F209466009ADC93 /* CellWithSectionViewController.xib */; };
29 | E35F5CFA1F209E72009ADC93 /* CellWithRowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E35F5CF81F209E72009ADC93 /* CellWithRowViewController.m */; };
30 | E35F5CFB1F209E72009ADC93 /* CellWithRowViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E35F5CF91F209E72009ADC93 /* CellWithRowViewController.xib */; };
31 | E36E5FF41F442BAB0029336A /* DataSlotForHeightViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E36E5FF21F442BAB0029336A /* DataSlotForHeightViewController.m */; };
32 | E36E5FF51F442BAB0029336A /* DataSlotForHeightViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E36E5FF31F442BAB0029336A /* DataSlotForHeightViewController.xib */; };
33 | E36E5FF91F4431E30029336A /* DYTableViewModule.m in Sources */ = {isa = PBXBuildFile; fileRef = E36E5FF81F4431E30029336A /* DYTableViewModule.m */; };
34 | E374C2B21F14B432002D53B5 /* DYTableViewAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C2AE1F14B432002D53B5 /* DYTableViewAgent.m */; };
35 | E374C2B31F14B432002D53B5 /* UITableView+DYTableViewBinder.m in Sources */ = {isa = PBXBuildFile; fileRef = E374C2B11F14B432002D53B5 /* UITableView+DYTableViewBinder.m */; };
36 | E374C2B51F14B451002D53B5 /* DYKit.podspec in Resources */ = {isa = PBXBuildFile; fileRef = E374C2B41F14B451002D53B5 /* DYKit.podspec */; };
37 | E3C024941F11831D0043DD8F /* OneTypeCellByNibTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C024921F11831D0043DD8F /* OneTypeCellByNibTableViewCell.m */; };
38 | E3C024951F11831D0043DD8F /* OneTypeCellByNibTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3C024931F11831D0043DD8F /* OneTypeCellByNibTableViewCell.xib */; };
39 | E3C024981F1186D20043DD8F /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C024971F1186D20043DD8F /* User.m */; };
40 | E3C0249E1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C0249D1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.m */; };
41 | E3C024A71F11FE280043DD8F /* CellWithButtonByNibTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C024A51F11FE280043DD8F /* CellWithButtonByNibTableViewCell.m */; };
42 | E3C024A81F11FE280043DD8F /* CellWithButtonByNibTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3C024A61F11FE280043DD8F /* CellWithButtonByNibTableViewCell.xib */; };
43 | E3C024C61F127BFD0043DD8F /* BlueTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E3C024C51F127BFD0043DD8F /* BlueTableViewCell.m */; };
44 | E3DF6D291F277426000D3E29 /* DataSlotViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E3DF6D271F277426000D3E29 /* DataSlotViewController.m */; };
45 | E3DF6D2A1F277426000D3E29 /* DataSlotViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E3DF6D281F277426000D3E29 /* DataSlotViewController.xib */; };
46 | F3E5D61059E59339761F5566 /* libPods-DYKitDemoTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C40DCAC09DA2A7A20FC02D49 /* libPods-DYKitDemoTests.a */; };
47 | /* End PBXBuildFile section */
48 |
49 | /* Begin PBXContainerItemProxy section */
50 | E3518EAD1F106B86008534B1 /* PBXContainerItemProxy */ = {
51 | isa = PBXContainerItemProxy;
52 | containerPortal = E3518E8B1F106B86008534B1 /* Project object */;
53 | proxyType = 1;
54 | remoteGlobalIDString = E3518E921F106B86008534B1;
55 | remoteInfo = DYKitDemo;
56 | };
57 | /* End PBXContainerItemProxy section */
58 |
59 | /* Begin PBXFileReference section */
60 | 1DAE2CED1F5FC97200EE9905 /* EditActionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditActionsViewController.h; sourceTree = ""; };
61 | 1DAE2CEE1F5FC97200EE9905 /* EditActionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditActionsViewController.m; sourceTree = ""; };
62 | 1DAE2CEF1F5FC97200EE9905 /* EditActionsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EditActionsViewController.xib; sourceTree = ""; };
63 | 1DAE2CFF1F62788200EE9905 /* DYTableViewRowAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DYTableViewRowAction.h; sourceTree = ""; };
64 | 1DAE2D001F62788200EE9905 /* DYTableViewRowAction.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DYTableViewRowAction.m; sourceTree = ""; };
65 | 1DAE2D021F66301D00EE9905 /* SectionsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SectionsViewController.h; sourceTree = ""; };
66 | 1DAE2D031F66301D00EE9905 /* SectionsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SectionsViewController.m; sourceTree = ""; };
67 | 1DAE2D041F66301D00EE9905 /* SectionsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SectionsViewController.xib; sourceTree = ""; };
68 | 1E88DE23D6E7CA445E389098 /* Pods-DYKitDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DYKitDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DYKitDemo/Pods-DYKitDemo.debug.xcconfig"; sourceTree = ""; };
69 | 72A92E059309EAC795189F22 /* Pods-DYKitDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DYKitDemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-DYKitDemoTests/Pods-DYKitDemoTests.release.xcconfig"; sourceTree = ""; };
70 | 73E844F4B5924AAEC7BA2DDF /* libPods-DYKitDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DYKitDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
71 | C40DCAC09DA2A7A20FC02D49 /* libPods-DYKitDemoTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DYKitDemoTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
72 | CB12A7CD13CFE9BEB9BBC3AE /* Pods-DYKitDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DYKitDemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DYKitDemoTests/Pods-DYKitDemoTests.debug.xcconfig"; sourceTree = ""; };
73 | E3518E931F106B86008534B1 /* DYKitDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DYKitDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
74 | E3518E971F106B86008534B1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
75 | E3518E991F106B86008534B1 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
76 | E3518E9A1F106B86008534B1 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
77 | E3518E9C1F106B86008534B1 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
78 | E3518E9D1F106B86008534B1 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
79 | E3518EA01F106B86008534B1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
80 | E3518EA21F106B86008534B1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
81 | E3518EA51F106B86008534B1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
82 | E3518EA71F106B86008534B1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
83 | E3518EAC1F106B86008534B1 /* DYKitDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DYKitDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
84 | E3518EB01F106B86008534B1 /* DYKitDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DYKitDemoTests.m; sourceTree = ""; };
85 | E3518EB21F106B86008534B1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
86 | E35F5CE81F205D52009ADC93 /* OneTypeCellViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OneTypeCellViewController.h; sourceTree = ""; };
87 | E35F5CE91F205D52009ADC93 /* OneTypeCellViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OneTypeCellViewController.m; sourceTree = ""; };
88 | E35F5CEA1F205D52009ADC93 /* OneTypeCellViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OneTypeCellViewController.xib; sourceTree = ""; };
89 | E35F5CED1F207B06009ADC93 /* CellWithSectionAndRowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellWithSectionAndRowViewController.h; sourceTree = ""; };
90 | E35F5CEE1F207B06009ADC93 /* CellWithSectionAndRowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellWithSectionAndRowViewController.m; sourceTree = ""; };
91 | E35F5CEF1F207B06009ADC93 /* CellWithSectionAndRowViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellWithSectionAndRowViewController.xib; sourceTree = ""; };
92 | E35F5CF21F209466009ADC93 /* CellWithSectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellWithSectionViewController.h; sourceTree = ""; };
93 | E35F5CF31F209466009ADC93 /* CellWithSectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellWithSectionViewController.m; sourceTree = ""; };
94 | E35F5CF41F209466009ADC93 /* CellWithSectionViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellWithSectionViewController.xib; sourceTree = ""; };
95 | E35F5CF71F209E72009ADC93 /* CellWithRowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellWithRowViewController.h; sourceTree = ""; };
96 | E35F5CF81F209E72009ADC93 /* CellWithRowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellWithRowViewController.m; sourceTree = ""; };
97 | E35F5CF91F209E72009ADC93 /* CellWithRowViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellWithRowViewController.xib; sourceTree = ""; };
98 | E35F5CFC1F20A084009ADC93 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
99 | E36E5FF11F442BAB0029336A /* DataSlotForHeightViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataSlotForHeightViewController.h; sourceTree = ""; };
100 | E36E5FF21F442BAB0029336A /* DataSlotForHeightViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataSlotForHeightViewController.m; sourceTree = ""; };
101 | E36E5FF31F442BAB0029336A /* DataSlotForHeightViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DataSlotForHeightViewController.xib; sourceTree = ""; };
102 | E36E5FF61F442FC40029336A /* DYMacro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DYMacro.h; sourceTree = ""; };
103 | E36E5FF71F4431E30029336A /* DYTableViewModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DYTableViewModule.h; sourceTree = ""; };
104 | E36E5FF81F4431E30029336A /* DYTableViewModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DYTableViewModule.m; sourceTree = ""; };
105 | E374C2AD1F14B432002D53B5 /* DYTableViewAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DYTableViewAgent.h; sourceTree = ""; };
106 | E374C2AE1F14B432002D53B5 /* DYTableViewAgent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DYTableViewAgent.m; sourceTree = ""; };
107 | E374C2B01F14B432002D53B5 /* UITableView+DYTableViewBinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+DYTableViewBinder.h"; sourceTree = ""; };
108 | E374C2B11F14B432002D53B5 /* UITableView+DYTableViewBinder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UITableView+DYTableViewBinder.m"; sourceTree = ""; };
109 | E374C2B41F14B451002D53B5 /* DYKit.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DYKit.podspec; sourceTree = ""; };
110 | E374C2B61F14B46D002D53B5 /* DYKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DYKit.h; sourceTree = ""; };
111 | E3C024911F11831D0043DD8F /* OneTypeCellByNibTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OneTypeCellByNibTableViewCell.h; sourceTree = ""; };
112 | E3C024921F11831D0043DD8F /* OneTypeCellByNibTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OneTypeCellByNibTableViewCell.m; sourceTree = ""; };
113 | E3C024931F11831D0043DD8F /* OneTypeCellByNibTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = OneTypeCellByNibTableViewCell.xib; sourceTree = ""; };
114 | E3C024961F1186D20043DD8F /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = ""; };
115 | E3C024971F1186D20043DD8F /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = ""; };
116 | E3C0249C1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OneTypeCellByClassTableViewCell.h; sourceTree = ""; };
117 | E3C0249D1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OneTypeCellByClassTableViewCell.m; sourceTree = ""; };
118 | E3C024A41F11FE280043DD8F /* CellWithButtonByNibTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CellWithButtonByNibTableViewCell.h; sourceTree = ""; };
119 | E3C024A51F11FE280043DD8F /* CellWithButtonByNibTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CellWithButtonByNibTableViewCell.m; sourceTree = ""; };
120 | E3C024A61F11FE280043DD8F /* CellWithButtonByNibTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CellWithButtonByNibTableViewCell.xib; sourceTree = ""; };
121 | E3C024C41F127BFD0043DD8F /* BlueTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlueTableViewCell.h; sourceTree = ""; };
122 | E3C024C51F127BFD0043DD8F /* BlueTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BlueTableViewCell.m; sourceTree = ""; };
123 | E3DF6D261F277426000D3E29 /* DataSlotViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DataSlotViewController.h; sourceTree = ""; };
124 | E3DF6D271F277426000D3E29 /* DataSlotViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DataSlotViewController.m; sourceTree = ""; };
125 | E3DF6D281F277426000D3E29 /* DataSlotViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DataSlotViewController.xib; sourceTree = ""; };
126 | FCC7EA0B3413388469B9EEBA /* Pods-DYKitDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DYKitDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-DYKitDemo/Pods-DYKitDemo.release.xcconfig"; sourceTree = ""; };
127 | /* End PBXFileReference section */
128 |
129 | /* Begin PBXFrameworksBuildPhase section */
130 | E3518E901F106B86008534B1 /* Frameworks */ = {
131 | isa = PBXFrameworksBuildPhase;
132 | buildActionMask = 2147483647;
133 | files = (
134 | 8D8A3769464DEA332C057D2C /* libPods-DYKitDemo.a in Frameworks */,
135 | );
136 | runOnlyForDeploymentPostprocessing = 0;
137 | };
138 | E3518EA91F106B86008534B1 /* Frameworks */ = {
139 | isa = PBXFrameworksBuildPhase;
140 | buildActionMask = 2147483647;
141 | files = (
142 | F3E5D61059E59339761F5566 /* libPods-DYKitDemoTests.a in Frameworks */,
143 | );
144 | runOnlyForDeploymentPostprocessing = 0;
145 | };
146 | /* End PBXFrameworksBuildPhase section */
147 |
148 | /* Begin PBXGroup section */
149 | 2A23E129A1489ECCDC4E73E4 /* Frameworks */ = {
150 | isa = PBXGroup;
151 | children = (
152 | 73E844F4B5924AAEC7BA2DDF /* libPods-DYKitDemo.a */,
153 | C40DCAC09DA2A7A20FC02D49 /* libPods-DYKitDemoTests.a */,
154 | );
155 | name = Frameworks;
156 | sourceTree = "";
157 | };
158 | 90B4662C78221F45B37557E1 /* Pods */ = {
159 | isa = PBXGroup;
160 | children = (
161 | 1E88DE23D6E7CA445E389098 /* Pods-DYKitDemo.debug.xcconfig */,
162 | FCC7EA0B3413388469B9EEBA /* Pods-DYKitDemo.release.xcconfig */,
163 | CB12A7CD13CFE9BEB9BBC3AE /* Pods-DYKitDemoTests.debug.xcconfig */,
164 | 72A92E059309EAC795189F22 /* Pods-DYKitDemoTests.release.xcconfig */,
165 | );
166 | name = Pods;
167 | sourceTree = "";
168 | };
169 | E3518E8A1F106B86008534B1 = {
170 | isa = PBXGroup;
171 | children = (
172 | E35F5CFC1F20A084009ADC93 /* README.md */,
173 | E374C2B41F14B451002D53B5 /* DYKit.podspec */,
174 | E374C2AC1F14B432002D53B5 /* DYKit */,
175 | E3518E951F106B86008534B1 /* DYKitDemo */,
176 | E3518EAF1F106B86008534B1 /* DYKitDemoTests */,
177 | E3518E941F106B86008534B1 /* Products */,
178 | 90B4662C78221F45B37557E1 /* Pods */,
179 | 2A23E129A1489ECCDC4E73E4 /* Frameworks */,
180 | );
181 | sourceTree = "";
182 | };
183 | E3518E941F106B86008534B1 /* Products */ = {
184 | isa = PBXGroup;
185 | children = (
186 | E3518E931F106B86008534B1 /* DYKitDemo.app */,
187 | E3518EAC1F106B86008534B1 /* DYKitDemoTests.xctest */,
188 | );
189 | name = Products;
190 | sourceTree = "";
191 | };
192 | E3518E951F106B86008534B1 /* DYKitDemo */ = {
193 | isa = PBXGroup;
194 | children = (
195 | E3C024871F1180B20043DD8F /* module */,
196 | E3518E991F106B86008534B1 /* AppDelegate.h */,
197 | E3518E9A1F106B86008534B1 /* AppDelegate.m */,
198 | E3518E9C1F106B86008534B1 /* ViewController.h */,
199 | E3518E9D1F106B86008534B1 /* ViewController.m */,
200 | E3518E9F1F106B86008534B1 /* Main.storyboard */,
201 | E3518EA21F106B86008534B1 /* Assets.xcassets */,
202 | E3518EA41F106B86008534B1 /* LaunchScreen.storyboard */,
203 | E3518EA71F106B86008534B1 /* Info.plist */,
204 | E3518E961F106B86008534B1 /* Supporting Files */,
205 | );
206 | path = DYKitDemo;
207 | sourceTree = "";
208 | };
209 | E3518E961F106B86008534B1 /* Supporting Files */ = {
210 | isa = PBXGroup;
211 | children = (
212 | E3518E971F106B86008534B1 /* main.m */,
213 | );
214 | name = "Supporting Files";
215 | sourceTree = "";
216 | };
217 | E3518EAF1F106B86008534B1 /* DYKitDemoTests */ = {
218 | isa = PBXGroup;
219 | children = (
220 | E3518EB01F106B86008534B1 /* DYKitDemoTests.m */,
221 | E3518EB21F106B86008534B1 /* Info.plist */,
222 | );
223 | path = DYKitDemoTests;
224 | sourceTree = "";
225 | };
226 | E374C2AC1F14B432002D53B5 /* DYKit */ = {
227 | isa = PBXGroup;
228 | children = (
229 | E374C2B61F14B46D002D53B5 /* DYKit.h */,
230 | E36E5FF61F442FC40029336A /* DYMacro.h */,
231 | E374C2AD1F14B432002D53B5 /* DYTableViewAgent.h */,
232 | E374C2AE1F14B432002D53B5 /* DYTableViewAgent.m */,
233 | E36E5FF71F4431E30029336A /* DYTableViewModule.h */,
234 | E36E5FF81F4431E30029336A /* DYTableViewModule.m */,
235 | E374C2B01F14B432002D53B5 /* UITableView+DYTableViewBinder.h */,
236 | E374C2B11F14B432002D53B5 /* UITableView+DYTableViewBinder.m */,
237 | 1DAE2CFF1F62788200EE9905 /* DYTableViewRowAction.h */,
238 | 1DAE2D001F62788200EE9905 /* DYTableViewRowAction.m */,
239 | );
240 | path = DYKit;
241 | sourceTree = "";
242 | };
243 | E3C024871F1180B20043DD8F /* module */ = {
244 | isa = PBXGroup;
245 | children = (
246 | E3C024881F1180B20043DD8F /* controller */,
247 | E3C024891F1180B20043DD8F /* model */,
248 | E3C0248A1F1180B20043DD8F /* view */,
249 | );
250 | path = module;
251 | sourceTree = "";
252 | };
253 | E3C024881F1180B20043DD8F /* controller */ = {
254 | isa = PBXGroup;
255 | children = (
256 | E35F5CE81F205D52009ADC93 /* OneTypeCellViewController.h */,
257 | E35F5CE91F205D52009ADC93 /* OneTypeCellViewController.m */,
258 | E35F5CEA1F205D52009ADC93 /* OneTypeCellViewController.xib */,
259 | E35F5CED1F207B06009ADC93 /* CellWithSectionAndRowViewController.h */,
260 | E35F5CEE1F207B06009ADC93 /* CellWithSectionAndRowViewController.m */,
261 | E35F5CEF1F207B06009ADC93 /* CellWithSectionAndRowViewController.xib */,
262 | E35F5CF21F209466009ADC93 /* CellWithSectionViewController.h */,
263 | E35F5CF31F209466009ADC93 /* CellWithSectionViewController.m */,
264 | E35F5CF41F209466009ADC93 /* CellWithSectionViewController.xib */,
265 | E35F5CF71F209E72009ADC93 /* CellWithRowViewController.h */,
266 | E35F5CF81F209E72009ADC93 /* CellWithRowViewController.m */,
267 | E35F5CF91F209E72009ADC93 /* CellWithRowViewController.xib */,
268 | E3DF6D261F277426000D3E29 /* DataSlotViewController.h */,
269 | E3DF6D271F277426000D3E29 /* DataSlotViewController.m */,
270 | E3DF6D281F277426000D3E29 /* DataSlotViewController.xib */,
271 | E36E5FF11F442BAB0029336A /* DataSlotForHeightViewController.h */,
272 | E36E5FF21F442BAB0029336A /* DataSlotForHeightViewController.m */,
273 | E36E5FF31F442BAB0029336A /* DataSlotForHeightViewController.xib */,
274 | 1DAE2CED1F5FC97200EE9905 /* EditActionsViewController.h */,
275 | 1DAE2CEE1F5FC97200EE9905 /* EditActionsViewController.m */,
276 | 1DAE2CEF1F5FC97200EE9905 /* EditActionsViewController.xib */,
277 | 1DAE2D021F66301D00EE9905 /* SectionsViewController.h */,
278 | 1DAE2D031F66301D00EE9905 /* SectionsViewController.m */,
279 | 1DAE2D041F66301D00EE9905 /* SectionsViewController.xib */,
280 | );
281 | path = controller;
282 | sourceTree = "";
283 | };
284 | E3C024891F1180B20043DD8F /* model */ = {
285 | isa = PBXGroup;
286 | children = (
287 | E3C024961F1186D20043DD8F /* User.h */,
288 | E3C024971F1186D20043DD8F /* User.m */,
289 | );
290 | path = model;
291 | sourceTree = "";
292 | };
293 | E3C0248A1F1180B20043DD8F /* view */ = {
294 | isa = PBXGroup;
295 | children = (
296 | E3C024911F11831D0043DD8F /* OneTypeCellByNibTableViewCell.h */,
297 | E3C024921F11831D0043DD8F /* OneTypeCellByNibTableViewCell.m */,
298 | E3C024931F11831D0043DD8F /* OneTypeCellByNibTableViewCell.xib */,
299 | E3C0249C1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.h */,
300 | E3C0249D1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.m */,
301 | E3C024A41F11FE280043DD8F /* CellWithButtonByNibTableViewCell.h */,
302 | E3C024A51F11FE280043DD8F /* CellWithButtonByNibTableViewCell.m */,
303 | E3C024A61F11FE280043DD8F /* CellWithButtonByNibTableViewCell.xib */,
304 | E3C024C41F127BFD0043DD8F /* BlueTableViewCell.h */,
305 | E3C024C51F127BFD0043DD8F /* BlueTableViewCell.m */,
306 | );
307 | path = view;
308 | sourceTree = "";
309 | };
310 | /* End PBXGroup section */
311 |
312 | /* Begin PBXNativeTarget section */
313 | E3518E921F106B86008534B1 /* DYKitDemo */ = {
314 | isa = PBXNativeTarget;
315 | buildConfigurationList = E3518EB51F106B86008534B1 /* Build configuration list for PBXNativeTarget "DYKitDemo" */;
316 | buildPhases = (
317 | 39EA5B64AB302CEFFD88578E /* [CP] Check Pods Manifest.lock */,
318 | E3518E8F1F106B86008534B1 /* Sources */,
319 | E3518E901F106B86008534B1 /* Frameworks */,
320 | E3518E911F106B86008534B1 /* Resources */,
321 | 9DC4383A2DC24AC9CCD99786 /* [CP] Embed Pods Frameworks */,
322 | 6C1E46DA4974D4A0162ADA8E /* [CP] Copy Pods Resources */,
323 | );
324 | buildRules = (
325 | );
326 | dependencies = (
327 | );
328 | name = DYKitDemo;
329 | productName = DYKitDemo;
330 | productReference = E3518E931F106B86008534B1 /* DYKitDemo.app */;
331 | productType = "com.apple.product-type.application";
332 | };
333 | E3518EAB1F106B86008534B1 /* DYKitDemoTests */ = {
334 | isa = PBXNativeTarget;
335 | buildConfigurationList = E3518EB81F106B86008534B1 /* Build configuration list for PBXNativeTarget "DYKitDemoTests" */;
336 | buildPhases = (
337 | AEE192114B554786329685EE /* [CP] Check Pods Manifest.lock */,
338 | E3518EA81F106B86008534B1 /* Sources */,
339 | E3518EA91F106B86008534B1 /* Frameworks */,
340 | E3518EAA1F106B86008534B1 /* Resources */,
341 | 10ABBCCD0CD0E73B5C646E22 /* [CP] Embed Pods Frameworks */,
342 | 5E9D161FAA82DE4C15F128AD /* [CP] Copy Pods Resources */,
343 | );
344 | buildRules = (
345 | );
346 | dependencies = (
347 | E3518EAE1F106B86008534B1 /* PBXTargetDependency */,
348 | );
349 | name = DYKitDemoTests;
350 | productName = DYKitDemoTests;
351 | productReference = E3518EAC1F106B86008534B1 /* DYKitDemoTests.xctest */;
352 | productType = "com.apple.product-type.bundle.unit-test";
353 | };
354 | /* End PBXNativeTarget section */
355 |
356 | /* Begin PBXProject section */
357 | E3518E8B1F106B86008534B1 /* Project object */ = {
358 | isa = PBXProject;
359 | attributes = {
360 | LastUpgradeCheck = 0830;
361 | ORGANIZATIONNAME = DuYe;
362 | TargetAttributes = {
363 | E3518E921F106B86008534B1 = {
364 | CreatedOnToolsVersion = 8.3.3;
365 | DevelopmentTeam = MU3P497PKC;
366 | ProvisioningStyle = Automatic;
367 | };
368 | E3518EAB1F106B86008534B1 = {
369 | CreatedOnToolsVersion = 8.3.3;
370 | ProvisioningStyle = Automatic;
371 | TestTargetID = E3518E921F106B86008534B1;
372 | };
373 | };
374 | };
375 | buildConfigurationList = E3518E8E1F106B86008534B1 /* Build configuration list for PBXProject "DYKitDemo" */;
376 | compatibilityVersion = "Xcode 3.2";
377 | developmentRegion = English;
378 | hasScannedForEncodings = 0;
379 | knownRegions = (
380 | en,
381 | Base,
382 | );
383 | mainGroup = E3518E8A1F106B86008534B1;
384 | productRefGroup = E3518E941F106B86008534B1 /* Products */;
385 | projectDirPath = "";
386 | projectRoot = "";
387 | targets = (
388 | E3518E921F106B86008534B1 /* DYKitDemo */,
389 | E3518EAB1F106B86008534B1 /* DYKitDemoTests */,
390 | );
391 | };
392 | /* End PBXProject section */
393 |
394 | /* Begin PBXResourcesBuildPhase section */
395 | E3518E911F106B86008534B1 /* Resources */ = {
396 | isa = PBXResourcesBuildPhase;
397 | buildActionMask = 2147483647;
398 | files = (
399 | E374C2B51F14B451002D53B5 /* DYKit.podspec in Resources */,
400 | E3518EA61F106B86008534B1 /* LaunchScreen.storyboard in Resources */,
401 | 1DAE2D061F66301D00EE9905 /* SectionsViewController.xib in Resources */,
402 | E35F5CF61F209466009ADC93 /* CellWithSectionViewController.xib in Resources */,
403 | E36E5FF51F442BAB0029336A /* DataSlotForHeightViewController.xib in Resources */,
404 | E3C024A81F11FE280043DD8F /* CellWithButtonByNibTableViewCell.xib in Resources */,
405 | E35F5CF11F207B06009ADC93 /* CellWithSectionAndRowViewController.xib in Resources */,
406 | E3518EA31F106B86008534B1 /* Assets.xcassets in Resources */,
407 | E35F5CEC1F205D52009ADC93 /* OneTypeCellViewController.xib in Resources */,
408 | E3DF6D2A1F277426000D3E29 /* DataSlotViewController.xib in Resources */,
409 | 1DAE2CF11F5FC97200EE9905 /* EditActionsViewController.xib in Resources */,
410 | E35F5CFB1F209E72009ADC93 /* CellWithRowViewController.xib in Resources */,
411 | E3C024951F11831D0043DD8F /* OneTypeCellByNibTableViewCell.xib in Resources */,
412 | E3518EA11F106B86008534B1 /* Main.storyboard in Resources */,
413 | );
414 | runOnlyForDeploymentPostprocessing = 0;
415 | };
416 | E3518EAA1F106B86008534B1 /* Resources */ = {
417 | isa = PBXResourcesBuildPhase;
418 | buildActionMask = 2147483647;
419 | files = (
420 | );
421 | runOnlyForDeploymentPostprocessing = 0;
422 | };
423 | /* End PBXResourcesBuildPhase section */
424 |
425 | /* Begin PBXShellScriptBuildPhase section */
426 | 10ABBCCD0CD0E73B5C646E22 /* [CP] Embed Pods Frameworks */ = {
427 | isa = PBXShellScriptBuildPhase;
428 | buildActionMask = 2147483647;
429 | files = (
430 | );
431 | inputPaths = (
432 | );
433 | name = "[CP] Embed Pods Frameworks";
434 | outputPaths = (
435 | );
436 | runOnlyForDeploymentPostprocessing = 0;
437 | shellPath = /bin/sh;
438 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DYKitDemoTests/Pods-DYKitDemoTests-frameworks.sh\"\n";
439 | showEnvVarsInLog = 0;
440 | };
441 | 39EA5B64AB302CEFFD88578E /* [CP] Check Pods Manifest.lock */ = {
442 | isa = PBXShellScriptBuildPhase;
443 | buildActionMask = 2147483647;
444 | files = (
445 | );
446 | inputPaths = (
447 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
448 | "${PODS_ROOT}/Manifest.lock",
449 | );
450 | name = "[CP] Check Pods Manifest.lock";
451 | outputPaths = (
452 | "$(DERIVED_FILE_DIR)/Pods-DYKitDemo-checkManifestLockResult.txt",
453 | );
454 | runOnlyForDeploymentPostprocessing = 0;
455 | shellPath = /bin/sh;
456 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
457 | showEnvVarsInLog = 0;
458 | };
459 | 5E9D161FAA82DE4C15F128AD /* [CP] Copy Pods Resources */ = {
460 | isa = PBXShellScriptBuildPhase;
461 | buildActionMask = 2147483647;
462 | files = (
463 | );
464 | inputPaths = (
465 | );
466 | name = "[CP] Copy Pods Resources";
467 | outputPaths = (
468 | );
469 | runOnlyForDeploymentPostprocessing = 0;
470 | shellPath = /bin/sh;
471 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DYKitDemoTests/Pods-DYKitDemoTests-resources.sh\"\n";
472 | showEnvVarsInLog = 0;
473 | };
474 | 6C1E46DA4974D4A0162ADA8E /* [CP] Copy Pods Resources */ = {
475 | isa = PBXShellScriptBuildPhase;
476 | buildActionMask = 2147483647;
477 | files = (
478 | );
479 | inputPaths = (
480 | );
481 | name = "[CP] Copy Pods Resources";
482 | outputPaths = (
483 | );
484 | runOnlyForDeploymentPostprocessing = 0;
485 | shellPath = /bin/sh;
486 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DYKitDemo/Pods-DYKitDemo-resources.sh\"\n";
487 | showEnvVarsInLog = 0;
488 | };
489 | 9DC4383A2DC24AC9CCD99786 /* [CP] Embed Pods Frameworks */ = {
490 | isa = PBXShellScriptBuildPhase;
491 | buildActionMask = 2147483647;
492 | files = (
493 | );
494 | inputPaths = (
495 | );
496 | name = "[CP] Embed Pods Frameworks";
497 | outputPaths = (
498 | );
499 | runOnlyForDeploymentPostprocessing = 0;
500 | shellPath = /bin/sh;
501 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DYKitDemo/Pods-DYKitDemo-frameworks.sh\"\n";
502 | showEnvVarsInLog = 0;
503 | };
504 | AEE192114B554786329685EE /* [CP] Check Pods Manifest.lock */ = {
505 | isa = PBXShellScriptBuildPhase;
506 | buildActionMask = 2147483647;
507 | files = (
508 | );
509 | inputPaths = (
510 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
511 | "${PODS_ROOT}/Manifest.lock",
512 | );
513 | name = "[CP] Check Pods Manifest.lock";
514 | outputPaths = (
515 | "$(DERIVED_FILE_DIR)/Pods-DYKitDemoTests-checkManifestLockResult.txt",
516 | );
517 | runOnlyForDeploymentPostprocessing = 0;
518 | shellPath = /bin/sh;
519 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
520 | showEnvVarsInLog = 0;
521 | };
522 | /* End PBXShellScriptBuildPhase section */
523 |
524 | /* Begin PBXSourcesBuildPhase section */
525 | E3518E8F1F106B86008534B1 /* Sources */ = {
526 | isa = PBXSourcesBuildPhase;
527 | buildActionMask = 2147483647;
528 | files = (
529 | E3C024981F1186D20043DD8F /* User.m in Sources */,
530 | E35F5CFA1F209E72009ADC93 /* CellWithRowViewController.m in Sources */,
531 | 1DAE2D011F62788200EE9905 /* DYTableViewRowAction.m in Sources */,
532 | E3518E9E1F106B86008534B1 /* ViewController.m in Sources */,
533 | E374C2B31F14B432002D53B5 /* UITableView+DYTableViewBinder.m in Sources */,
534 | E36E5FF91F4431E30029336A /* DYTableViewModule.m in Sources */,
535 | E35F5CEB1F205D52009ADC93 /* OneTypeCellViewController.m in Sources */,
536 | E36E5FF41F442BAB0029336A /* DataSlotForHeightViewController.m in Sources */,
537 | E3C024C61F127BFD0043DD8F /* BlueTableViewCell.m in Sources */,
538 | 1DAE2CF01F5FC97200EE9905 /* EditActionsViewController.m in Sources */,
539 | E3C024941F11831D0043DD8F /* OneTypeCellByNibTableViewCell.m in Sources */,
540 | E3518E9B1F106B86008534B1 /* AppDelegate.m in Sources */,
541 | E35F5CF01F207B06009ADC93 /* CellWithSectionAndRowViewController.m in Sources */,
542 | E3C024A71F11FE280043DD8F /* CellWithButtonByNibTableViewCell.m in Sources */,
543 | 1DAE2D051F66301D00EE9905 /* SectionsViewController.m in Sources */,
544 | E374C2B21F14B432002D53B5 /* DYTableViewAgent.m in Sources */,
545 | E3C0249E1F11DFED0043DD8F /* OneTypeCellByClassTableViewCell.m in Sources */,
546 | E35F5CF51F209466009ADC93 /* CellWithSectionViewController.m in Sources */,
547 | E3DF6D291F277426000D3E29 /* DataSlotViewController.m in Sources */,
548 | E3518E981F106B86008534B1 /* main.m in Sources */,
549 | );
550 | runOnlyForDeploymentPostprocessing = 0;
551 | };
552 | E3518EA81F106B86008534B1 /* Sources */ = {
553 | isa = PBXSourcesBuildPhase;
554 | buildActionMask = 2147483647;
555 | files = (
556 | E3518EB11F106B86008534B1 /* DYKitDemoTests.m in Sources */,
557 | );
558 | runOnlyForDeploymentPostprocessing = 0;
559 | };
560 | /* End PBXSourcesBuildPhase section */
561 |
562 | /* Begin PBXTargetDependency section */
563 | E3518EAE1F106B86008534B1 /* PBXTargetDependency */ = {
564 | isa = PBXTargetDependency;
565 | target = E3518E921F106B86008534B1 /* DYKitDemo */;
566 | targetProxy = E3518EAD1F106B86008534B1 /* PBXContainerItemProxy */;
567 | };
568 | /* End PBXTargetDependency section */
569 |
570 | /* Begin PBXVariantGroup section */
571 | E3518E9F1F106B86008534B1 /* Main.storyboard */ = {
572 | isa = PBXVariantGroup;
573 | children = (
574 | E3518EA01F106B86008534B1 /* Base */,
575 | );
576 | name = Main.storyboard;
577 | sourceTree = "";
578 | };
579 | E3518EA41F106B86008534B1 /* LaunchScreen.storyboard */ = {
580 | isa = PBXVariantGroup;
581 | children = (
582 | E3518EA51F106B86008534B1 /* Base */,
583 | );
584 | name = LaunchScreen.storyboard;
585 | sourceTree = "";
586 | };
587 | /* End PBXVariantGroup section */
588 |
589 | /* Begin XCBuildConfiguration section */
590 | E3518EB31F106B86008534B1 /* Debug */ = {
591 | isa = XCBuildConfiguration;
592 | buildSettings = {
593 | ALWAYS_SEARCH_USER_PATHS = NO;
594 | CLANG_ANALYZER_NONNULL = YES;
595 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
596 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
597 | CLANG_CXX_LIBRARY = "libc++";
598 | CLANG_ENABLE_MODULES = YES;
599 | CLANG_ENABLE_OBJC_ARC = YES;
600 | CLANG_WARN_BOOL_CONVERSION = YES;
601 | CLANG_WARN_CONSTANT_CONVERSION = YES;
602 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
603 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
604 | CLANG_WARN_EMPTY_BODY = YES;
605 | CLANG_WARN_ENUM_CONVERSION = YES;
606 | CLANG_WARN_INFINITE_RECURSION = YES;
607 | CLANG_WARN_INT_CONVERSION = YES;
608 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
609 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
610 | CLANG_WARN_UNREACHABLE_CODE = YES;
611 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
612 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
613 | COPY_PHASE_STRIP = NO;
614 | DEBUG_INFORMATION_FORMAT = dwarf;
615 | ENABLE_STRICT_OBJC_MSGSEND = YES;
616 | ENABLE_TESTABILITY = YES;
617 | GCC_C_LANGUAGE_STANDARD = gnu99;
618 | GCC_DYNAMIC_NO_PIC = NO;
619 | GCC_NO_COMMON_BLOCKS = YES;
620 | GCC_OPTIMIZATION_LEVEL = 0;
621 | GCC_PREPROCESSOR_DEFINITIONS = (
622 | "DEBUG=1",
623 | "$(inherited)",
624 | );
625 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
626 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
627 | GCC_WARN_UNDECLARED_SELECTOR = YES;
628 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
629 | GCC_WARN_UNUSED_FUNCTION = YES;
630 | GCC_WARN_UNUSED_VARIABLE = YES;
631 | IPHONEOS_DEPLOYMENT_TARGET = 10.3;
632 | MTL_ENABLE_DEBUG_INFO = YES;
633 | ONLY_ACTIVE_ARCH = YES;
634 | SDKROOT = iphoneos;
635 | TARGETED_DEVICE_FAMILY = "1,2";
636 | };
637 | name = Debug;
638 | };
639 | E3518EB41F106B86008534B1 /* Release */ = {
640 | isa = XCBuildConfiguration;
641 | buildSettings = {
642 | ALWAYS_SEARCH_USER_PATHS = NO;
643 | CLANG_ANALYZER_NONNULL = YES;
644 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
645 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
646 | CLANG_CXX_LIBRARY = "libc++";
647 | CLANG_ENABLE_MODULES = YES;
648 | CLANG_ENABLE_OBJC_ARC = YES;
649 | CLANG_WARN_BOOL_CONVERSION = YES;
650 | CLANG_WARN_CONSTANT_CONVERSION = YES;
651 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
652 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
653 | CLANG_WARN_EMPTY_BODY = YES;
654 | CLANG_WARN_ENUM_CONVERSION = YES;
655 | CLANG_WARN_INFINITE_RECURSION = YES;
656 | CLANG_WARN_INT_CONVERSION = YES;
657 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
658 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
659 | CLANG_WARN_UNREACHABLE_CODE = YES;
660 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
661 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
662 | COPY_PHASE_STRIP = NO;
663 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
664 | ENABLE_NS_ASSERTIONS = NO;
665 | ENABLE_STRICT_OBJC_MSGSEND = YES;
666 | GCC_C_LANGUAGE_STANDARD = gnu99;
667 | GCC_NO_COMMON_BLOCKS = YES;
668 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
669 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
670 | GCC_WARN_UNDECLARED_SELECTOR = YES;
671 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
672 | GCC_WARN_UNUSED_FUNCTION = YES;
673 | GCC_WARN_UNUSED_VARIABLE = YES;
674 | IPHONEOS_DEPLOYMENT_TARGET = 10.3;
675 | MTL_ENABLE_DEBUG_INFO = NO;
676 | SDKROOT = iphoneos;
677 | TARGETED_DEVICE_FAMILY = "1,2";
678 | VALIDATE_PRODUCT = YES;
679 | };
680 | name = Release;
681 | };
682 | E3518EB61F106B86008534B1 /* Debug */ = {
683 | isa = XCBuildConfiguration;
684 | baseConfigurationReference = 1E88DE23D6E7CA445E389098 /* Pods-DYKitDemo.debug.xcconfig */;
685 | buildSettings = {
686 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
687 | DEVELOPMENT_TEAM = MU3P497PKC;
688 | INFOPLIST_FILE = DYKitDemo/Info.plist;
689 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
690 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
691 | PRODUCT_BUNDLE_IDENTIFIER = DY.DYKitDemo;
692 | PRODUCT_NAME = "$(TARGET_NAME)";
693 | };
694 | name = Debug;
695 | };
696 | E3518EB71F106B86008534B1 /* Release */ = {
697 | isa = XCBuildConfiguration;
698 | baseConfigurationReference = FCC7EA0B3413388469B9EEBA /* Pods-DYKitDemo.release.xcconfig */;
699 | buildSettings = {
700 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
701 | DEVELOPMENT_TEAM = MU3P497PKC;
702 | INFOPLIST_FILE = DYKitDemo/Info.plist;
703 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
704 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
705 | PRODUCT_BUNDLE_IDENTIFIER = DY.DYKitDemo;
706 | PRODUCT_NAME = "$(TARGET_NAME)";
707 | };
708 | name = Release;
709 | };
710 | E3518EB91F106B86008534B1 /* Debug */ = {
711 | isa = XCBuildConfiguration;
712 | baseConfigurationReference = CB12A7CD13CFE9BEB9BBC3AE /* Pods-DYKitDemoTests.debug.xcconfig */;
713 | buildSettings = {
714 | BUNDLE_LOADER = "$(TEST_HOST)";
715 | INFOPLIST_FILE = DYKitDemoTests/Info.plist;
716 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
717 | PRODUCT_BUNDLE_IDENTIFIER = DY.DYKitDemoTests;
718 | PRODUCT_NAME = "$(TARGET_NAME)";
719 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DYKitDemo.app/DYKitDemo";
720 | };
721 | name = Debug;
722 | };
723 | E3518EBA1F106B86008534B1 /* Release */ = {
724 | isa = XCBuildConfiguration;
725 | baseConfigurationReference = 72A92E059309EAC795189F22 /* Pods-DYKitDemoTests.release.xcconfig */;
726 | buildSettings = {
727 | BUNDLE_LOADER = "$(TEST_HOST)";
728 | INFOPLIST_FILE = DYKitDemoTests/Info.plist;
729 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
730 | PRODUCT_BUNDLE_IDENTIFIER = DY.DYKitDemoTests;
731 | PRODUCT_NAME = "$(TARGET_NAME)";
732 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DYKitDemo.app/DYKitDemo";
733 | };
734 | name = Release;
735 | };
736 | /* End XCBuildConfiguration section */
737 |
738 | /* Begin XCConfigurationList section */
739 | E3518E8E1F106B86008534B1 /* Build configuration list for PBXProject "DYKitDemo" */ = {
740 | isa = XCConfigurationList;
741 | buildConfigurations = (
742 | E3518EB31F106B86008534B1 /* Debug */,
743 | E3518EB41F106B86008534B1 /* Release */,
744 | );
745 | defaultConfigurationIsVisible = 0;
746 | defaultConfigurationName = Release;
747 | };
748 | E3518EB51F106B86008534B1 /* Build configuration list for PBXNativeTarget "DYKitDemo" */ = {
749 | isa = XCConfigurationList;
750 | buildConfigurations = (
751 | E3518EB61F106B86008534B1 /* Debug */,
752 | E3518EB71F106B86008534B1 /* Release */,
753 | );
754 | defaultConfigurationIsVisible = 0;
755 | defaultConfigurationName = Release;
756 | };
757 | E3518EB81F106B86008534B1 /* Build configuration list for PBXNativeTarget "DYKitDemoTests" */ = {
758 | isa = XCConfigurationList;
759 | buildConfigurations = (
760 | E3518EB91F106B86008534B1 /* Debug */,
761 | E3518EBA1F106B86008534B1 /* Release */,
762 | );
763 | defaultConfigurationIsVisible = 0;
764 | defaultConfigurationName = Release;
765 | };
766 | /* End XCConfigurationList section */
767 | };
768 | rootObject = E3518E8B1F106B86008534B1 /* Project object */;
769 | }
770 |
--------------------------------------------------------------------------------