├── multFunCell.gif
├── XZMultiFunctionCell.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcuserdata
│ │ └── xiazer.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcshareddata
│ │ └── XZMultiFunctionCell.xccheckout
├── xcuserdata
│ └── xiazer.xcuserdatad
│ │ ├── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── XZMultiFunctionCell.xcscheme
│ │ └── xcdebugger
│ │ └── Breakpoints_v2.xcbkptlist
└── project.pbxproj
├── XZMultiFunctionCell
├── ViewController.h
├── HomeViewCell.h
├── AppDelegate.h
├── main.m
├── MultiFunctionCell
│ ├── OverLayView.h
│ ├── OverLayView.m
│ ├── MultiFunctionTableView.h
│ ├── MultiFunctionCell.h
│ ├── MultiFunctionTableView.m
│ └── MultiFunctionCell.m
├── HomeViewCell.m
├── Images.xcassets
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Info.plist
├── Base.lproj
│ ├── Main.storyboard
│ └── LaunchScreen.xib
├── AppDelegate.m
└── ViewController.m
├── MultiFunctionCell.podspec
├── XZMultiFunctionCellTests
├── Info.plist
└── XZMultiFunctionCellTests.m
└── README.md
/multFunCell.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingundertree/MultiFunctionCell/HEAD/multFunCell.gif
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/project.xcworkspace/xcuserdata/xiazer.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kingundertree/MultiFunctionCell/HEAD/XZMultiFunctionCell.xcodeproj/project.xcworkspace/xcuserdata/xiazer.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/XZMultiFunctionCell/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/HomeViewCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewCell.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "MultiFunctionCell.h"
10 |
11 | @interface HomeViewCell : MultiFunctionCell
12 |
13 | - (void)configCell:(id)model index:(NSIndexPath*)index;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. 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 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. 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 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/OverLayView.h:
--------------------------------------------------------------------------------
1 | //
2 | // OverLayView.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class OverLayView;
12 |
13 | @protocol OverLayViewDelegate
14 | -(UIView *)overLayView:(OverLayView *)view didHitPoint:(CGPoint)didHitPoint withEvent:(UIEvent *)withEvent;
15 | @end
16 |
17 |
18 | @interface OverLayView : UIView
19 | @property(nonatomic, assign) id delegate;
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/MultiFunctionCell.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 |
3 | s.name = "MultiFunctionCell"
4 | s.version = "0.0.1"
5 | s.summary = ""
6 |
7 | s.description = ""
8 |
9 | s.homepage = "https://github.com/kingundertree/MultiFunctionCell"
10 |
11 | s.license = "MIT (example)"
12 | s.author = { "徐山" => "kingundertree@163.com" }
13 | s.source = { :git => "https://github.com/kingundertree/MultiFunctionCell.git" }
14 |
15 | s.source_files = 'MultiFunctionCell', 'XZMultiFunctionCell/MultiFunctionCell/*.{h,m}'
16 |
17 |
18 | end
19 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/xcuserdata/xiazer.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | XZMultiFunctionCell.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | F8148CDE1A5A6E61004809E2
16 |
17 | primary
18 |
19 |
20 | F8148CF71A5A6E61004809E2
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/HomeViewCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // HomeViewCell.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "HomeViewCell.h"
10 |
11 | //定义屏幕高度
12 | #define ScreenHeight [UIScreen mainScreen].bounds.size.height
13 | //定义屏幕宽度
14 | #define ScreenWidth [UIScreen mainScreen].bounds.size.width
15 |
16 | @implementation HomeViewCell
17 |
18 | - (void)configCell:(id)model index:(NSIndexPath*)index{
19 | UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, 80)];
20 | lab.backgroundColor = [UIColor whiteColor];
21 | [self.cellContentView addSubview:lab];
22 |
23 | lab.text = [NSString stringWithFormat:@" MultiFunctionCell---->> %ld",(long)index.row];
24 | }
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "29x29",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "40x40",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "40x40",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "60x60",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "60x60",
31 | "scale" : "3x"
32 | }
33 | ],
34 | "info" : {
35 | "version" : 1,
36 | "author" : "xcode"
37 | }
38 | }
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/OverLayView.m:
--------------------------------------------------------------------------------
1 | //
2 | // OverLayView.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "OverLayView.h"
10 |
11 | @implementation OverLayView
12 | @synthesize delegate;
13 |
14 | - (id)initWithFrame:(CGRect)frame
15 | {
16 | self = [super initWithFrame:frame];
17 | if (self) {
18 | // Initialization code
19 | self.backgroundColor = [UIColor clearColor];
20 | }
21 | return self;
22 | }
23 |
24 | -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
25 | if (self.delegate) {
26 | return [self.delegate overLayView:self didHitPoint:point withEvent:event];
27 | } else {
28 | return nil;
29 | }
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/MultiFunctionTableView.h:
--------------------------------------------------------------------------------
1 | //
2 | // MultiFunctionTableView.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "OverLayView.h"
11 | #import "MultiFunctionCell.h"
12 |
13 | @protocol MultiFunctionTableViewDelegate
14 | - (void)returnCellMenuIndex:(NSIndexPath *)indexPath menuIndexNum:(NSInteger)menuIndexNum isLeftMenu:(BOOL)isLeftMenu;
15 | @end
16 |
17 | @interface MultiFunctionTableView : UITableView
18 |
19 | @property (nonatomic, assign) id multiTableDelegate;
20 | - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;
21 | - (void)hideMenuActive:(BOOL)aninated;
22 | @end
23 |
--------------------------------------------------------------------------------
/XZMultiFunctionCellTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | xiazer.com.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/XZMultiFunctionCellTests/XZMultiFunctionCellTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // XZMultiFunctionCellTests.m
3 | // XZMultiFunctionCellTests
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface XZMultiFunctionCellTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation XZMultiFunctionCellTests
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 | // This is an example of a functional test case.
30 | XCTAssert(YES, @"Pass");
31 | }
32 |
33 | - (void)testPerformanceExample {
34 | // This is an example of a performance test case.
35 | [self measureBlock:^{
36 | // Put the code you want to measure the time of here.
37 | }];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | xiazer.com.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/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 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/xcuserdata/xiazer.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
20 |
21 |
22 |
24 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/project.xcworkspace/xcshareddata/XZMultiFunctionCell.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | F6E7DDCE-97D3-4F8F-A420-883EA0301DBE
9 | IDESourceControlProjectName
10 | XZMultiFunctionCell
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | B42B130DA2F3016C3314A9E28FA7DE36DAFD0031
14 | https://github.com/kingundertree/MultiFunctionCell.git
15 |
16 | IDESourceControlProjectPath
17 | XZMultiFunctionCell.xcodeproj
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | B42B130DA2F3016C3314A9E28FA7DE36DAFD0031
21 | ../..
22 |
23 | IDESourceControlProjectURL
24 | https://github.com/kingundertree/MultiFunctionCell.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | B42B130DA2F3016C3314A9E28FA7DE36DAFD0031
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | B42B130DA2F3016C3314A9E28FA7DE36DAFD0031
36 | IDESourceControlWCCName
37 | XZMultiFunctionCell
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ###先上效果图
2 | 
3 |
4 | ###github地址
5 |
6 | https://github.com/kingundertree/MultiFunctionCell
7 |
8 | ###功能
9 | 1. 支持定制UITableViewCell菜单,通过滑动UITableViewCell显示左右侧菜单选项
10 | 2. 支持cell的重用,以及单个cell的菜单定制
11 |
12 | ###实现机制
13 | 1. 定制UITableViewCell,在UITableViewCell.contentView上添加UIScrollView作为主视图,并绑定UIPanGestureRecognizer手势
14 | 2. 定义左右菜单视图,置于UIScrollView之下
15 | 3. 通过UIPanGestureRecognizer的事件控制UIScrollView的frame实现菜单的显示和隐藏
16 | 4. 定制UITableView,通过OverLayViewDelegate控制罩层的显示和隐藏
17 |
18 | ###使用方法
19 |
20 | ##### UITableView
21 | 继承MultiFunctionTableView
22 |
23 | self.tableList = [[MultiFunctionTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
24 | self.tableList.delegate = self;
25 | self.tableList.dataSource = self;
26 | self.tableList.rowHeight = 80;
27 | [self.view addSubview:self.tableList];
28 |
29 | Datasource的cellForRow方法中实现
30 | HomeViewCell继承MultiFunctionCell即可,并设置cell.cellActionDelegate = self.tableList即可。其他都不用care了
31 |
32 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
33 | static NSString *cellIdentify = @"cell";
34 | HomeViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentify];
35 | if (!cell) {
36 | cell = [[HomeViewCell alloc] initWithStyle:UITableViewCellStyleDefault
37 | reuseIdentifier:cellIdentify
38 | containingTableView:tableView
39 | leftUtilityButtons:@[@"left1"]
40 | rightUtilityButtons:@[@"right1",@"right2"]];
41 | cell.cellActionDelegate = self.tableList;
42 | [cell configCell:nil index:indexPath];
43 | }
44 |
45 |
46 | return cell;
47 | }
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/MultiFunctionCell.h:
--------------------------------------------------------------------------------
1 | //
2 | // MultiFunctionCell.h
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @class MultiFunctionCell;
12 |
13 | typedef NS_ENUM(NSInteger, MultiFunctionCellType) {
14 | MultiFunctionCellTypeForNormal = 0, // 常见状态,cell没有任何移动
15 | MultiFunctionCellTypeForLeftMenu = 1, // 左侧menu可见
16 | MultiFunctionCellTypeForRightMenu = 2, // 右侧menu可见
17 | };
18 |
19 |
20 | @protocol MultiFunctionCellActionDelegate
21 | - (void)tableMenuDidShowInCell:(MultiFunctionCell *)cell;
22 | - (void)tableMenuWillShowInCell:(MultiFunctionCell *)cell;
23 | - (void)tableMenuDidHideInCell:(MultiFunctionCell *)cell;
24 | - (void)tableMenuWillHideInCell:(MultiFunctionCell *)cell;
25 | - (void)deleteCell:(MultiFunctionCell *)cell;
26 | - (void)cellMenuIndex:(NSIndexPath *)indexPath menuIndexNum:(NSInteger)menuIndexNum isLeftMenu:(BOOL)isLeftMenu;
27 | @end
28 |
29 |
30 | @interface MultiFunctionCell : UITableViewCell
31 | @property (nonatomic, assign) id cellActionDelegate;
32 |
33 | @property (nonatomic, strong) NSArray *leftMenus;
34 | @property (nonatomic, strong) NSArray *rightMenus;
35 | @property (nonatomic, assign) float cellHeight;
36 | @property (nonatomic, strong) UIView *cellContentView;
37 | @property (nonatomic, assign) MultiFunctionCellType cellStauts;
38 | @property (nonatomic, strong) UIView *leftMenuView;
39 | @property (nonatomic, strong) UIView *rightMenuView;
40 |
41 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier containingTableView:(UITableView *)containingTableView leftUtilityButtons:(NSArray *)leftUtilityButtons rightUtilityButtons:(NSArray *)rightUtilityButtons;
42 |
43 | - (void)setMenuHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler;
44 | @end
45 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. 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 | - (void)applicationWillResignActive:(UIApplication *)application {
24 | // 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.
25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
26 | }
27 |
28 | - (void)applicationDidEnterBackground:(UIApplication *)application {
29 | // 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.
30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
31 | }
32 |
33 | - (void)applicationWillEnterForeground:(UIApplication *)application {
34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
35 | }
36 |
37 | - (void)applicationDidBecomeActive:(UIApplication *)application {
38 | // 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.
39 | }
40 |
41 | - (void)applicationWillTerminate:(UIApplication *)application {
42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
43 | }
44 |
45 | @end
46 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "MultiFunctionTableView.h"
11 | #import "HomeViewCell.h"
12 |
13 | @interface ViewController ()
14 | @property (nonatomic, strong) MultiFunctionTableView *tableList;
15 | @end
16 |
17 | @implementation ViewController
18 |
19 | - (void)viewDidLoad {
20 | [super viewDidLoad];
21 | self.title = @"多功能cell";
22 |
23 | self.tableList = [[MultiFunctionTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
24 | self.tableList.delegate = self;
25 | self.tableList.dataSource = self;
26 | self.tableList.multiTableDelegate = self;
27 | self.tableList.rowHeight = 80;
28 | [self.view addSubview:self.tableList];
29 | }
30 |
31 | #pragma mark
32 | #pragma mark - UITableViewDelegate
33 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
34 | return tableView.rowHeight;
35 | }
36 |
37 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
38 | return 10;
39 | }
40 |
41 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
42 | static NSString *cellIdentify = @"cell";
43 | HomeViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentify];
44 | if (!cell) {
45 | cell = [[HomeViewCell alloc] initWithStyle:UITableViewCellStyleDefault
46 | reuseIdentifier:cellIdentify
47 | containingTableView:tableView
48 | leftUtilityButtons:@[@"left1"]
49 | rightUtilityButtons:@[@"right1",@"right2"]];
50 | cell.cellActionDelegate = self.tableList;
51 | [cell configCell:nil index:indexPath];
52 | }
53 |
54 |
55 | return cell;
56 | }
57 |
58 | #pragma mark - MultiFunctionTableViewDelegate
59 | - (void)returnCellMenuIndex:(NSIndexPath *)indexPath menuIndexNum:(NSInteger)menuIndexNum isLeftMenu:(BOOL)isLeftMenu {
60 |
61 | }
62 |
63 |
64 | - (void)didReceiveMemoryWarning {
65 | [super didReceiveMemoryWarning];
66 | // Dispose of any resources that can be recreated.
67 | }
68 |
69 | @end
70 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/Base.lproj/LaunchScreen.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/MultiFunctionTableView.m:
--------------------------------------------------------------------------------
1 | //
2 | // MultiFunctionTableView.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "MultiFunctionTableView.h"
10 |
11 | @interface MultiFunctionTableView ()
12 | @property (nonatomic, strong) MultiFunctionCell *activeCell;
13 | @property (nonatomic, strong) OverLayView *overLayView;
14 | @property (nonatomic, assign) BOOL isCellMenuOn;
15 | @property (nonatomic, assign) NSInteger cellIndex;
16 |
17 | @end
18 |
19 | @implementation MultiFunctionTableView
20 |
21 | - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{
22 | self = [super initWithFrame:frame style:style];
23 | if (self) {
24 |
25 | }
26 |
27 | return self;
28 | }
29 |
30 | #pragma mark - OverLayViewDelegate
31 | - (UIView *)overLayView:(OverLayView *)view didHitPoint:(CGPoint)didHitPoint withEvent:(UIEvent *)withEvent{
32 | BOOL shoudReceivePointTouch = YES;
33 |
34 | CGPoint location = [self convertPoint:didHitPoint fromView:view];
35 |
36 | CGRect rect;
37 | if (self.activeCell.cellStauts == MultiFunctionCellTypeForLeftMenu) {
38 | rect = [self.activeCell convertRect:self.activeCell.leftMenuView.frame toView:self];
39 | } else if (self.activeCell.cellStauts == MultiFunctionCellTypeForRightMenu) {
40 | rect = [self.activeCell convertRect:self.activeCell.rightMenuView.frame toView:self];
41 | }
42 | shoudReceivePointTouch = CGRectContainsPoint(rect, location);
43 | if (!shoudReceivePointTouch) {
44 | // 回复cell 菜单状态
45 | [self hideMenuActive:YES];
46 | }
47 |
48 | return (shoudReceivePointTouch) ? [self.activeCell hitTest:didHitPoint withEvent:withEvent] : view;
49 | }
50 |
51 | - (void)hideMenuActive:(BOOL)aninated{
52 | __block MultiFunctionTableView *this = self;
53 | [self.activeCell setMenuHidden:YES animated:YES completionHandler:^{
54 | this.isCellMenuOn = NO;
55 | }];
56 | }
57 | #pragma mark MultiFunctionCellActionDelegate
58 | - (void)tableMenuDidShowInCell:(MultiFunctionCell *)cell{
59 | self.cellIndex = [self indexPathForCell:cell].row;
60 | self.isCellMenuOn = YES;
61 | self.activeCell = cell;
62 | }
63 | - (void)tableMenuWillShowInCell:(MultiFunctionCell *)cell{
64 | self.cellIndex = [self indexPathForCell:cell].row;
65 | self.isCellMenuOn = YES;
66 | self.activeCell = cell;
67 | }
68 | - (void)tableMenuDidHideInCell:(MultiFunctionCell *)cell{
69 | self.cellIndex = -1;
70 | self.isCellMenuOn = NO;
71 | self.activeCell = nil;
72 | }
73 | - (void)tableMenuWillHideInCell:(MultiFunctionCell *)cell{
74 | self.cellIndex = -1;
75 | self.isCellMenuOn = NO;
76 | self.activeCell = nil;
77 | }
78 |
79 | - (void)cellMenuIndex:(NSIndexPath *)indexPath menuIndexNum:(NSInteger)menuIndexNum isLeftMenu:(BOOL)isLeftMenu;
80 | {
81 | NSLog(@"你选择了第 %ld 行第 %ld 个菜单",(long)indexPath.row+1,(long)menuIndexNum+1);
82 | if (self.multiTableDelegate && [self.multiTableDelegate respondsToSelector:@selector(returnCellMenuIndex:menuIndexNum:isLeftMenu:)]) {
83 | [self.multiTableDelegate returnCellMenuIndex:indexPath menuIndexNum:menuIndexNum isLeftMenu:isLeftMenu];
84 | }
85 | }
86 |
87 | - (void)deleteCell:(MultiFunctionCell *)cell{
88 | }
89 |
90 |
91 | #pragma mark UITableView delegate
92 | - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
93 | {
94 | if ([tableView cellForRowAtIndexPath:indexPath] == self.activeCell) {
95 | [self hideMenuActive:YES];
96 | return NO;
97 | }
98 | return YES;
99 | }
100 |
101 | - (void)setIsCellMenuOn:(BOOL)isCellMenuOn{
102 | if (_isCellMenuOn != isCellMenuOn) {
103 | _isCellMenuOn = isCellMenuOn;
104 | }
105 |
106 | if (_isCellMenuOn) {
107 | if (!self.overLayView) {
108 | self.overLayView = [[OverLayView alloc] initWithFrame:self.bounds];
109 | self.overLayView.delegate = self;
110 | [self addSubview:self.overLayView];
111 | }
112 | }else{
113 | self.activeCell = nil;
114 | [_overLayView removeFromSuperview];
115 | _overLayView = nil;
116 | }
117 | }
118 |
119 |
120 |
121 | @end
122 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/xcuserdata/xiazer.xcuserdatad/xcschemes/XZMultiFunctionCell.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
76 |
82 |
83 |
84 |
85 |
86 |
87 |
93 |
94 |
100 |
101 |
102 |
103 |
105 |
106 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell/MultiFunctionCell/MultiFunctionCell.m:
--------------------------------------------------------------------------------
1 | //
2 | // MultiFunctionCell.m
3 | // XZMultiFunctionCell
4 | //
5 | // Created by xiazer on 15/1/5.
6 | // Copyright (c) 2015年 xiazer. All rights reserved.
7 | //
8 |
9 | #import "MultiFunctionCell.h"
10 |
11 | //定义屏幕高度
12 | #define ScreenHeight [UIScreen mainScreen].bounds.size.height
13 | //定义屏幕宽度
14 | #define ScreenWidth [UIScreen mainScreen].bounds.size.width
15 |
16 | #define CellMenuWidth 80.0
17 |
18 | NSUInteger DeviceSystemMajorVersion()
19 | {
20 | static NSUInteger _deviceSystemMajorVersion = -1;
21 | static dispatch_once_t onceToken;
22 | dispatch_once(&onceToken, ^{
23 | _deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."] objectAtIndex:0] intValue];
24 | });
25 | return _deviceSystemMajorVersion;
26 | }
27 | #define IsSystemVersionOverSeven (DeviceSystemMajorVersion() >= 7)
28 |
29 |
30 | @interface MultiFunctionCell ()
31 | @property (nonatomic, assign) float startX;
32 | @property (nonatomic, assign) float cellStartX;
33 | @property (nonatomic, strong) UIView *baseCellView;
34 | @property (nonatomic, assign) float leftMargin;
35 | @property (nonatomic, assign) float rightMargin;
36 | @property (nonatomic, assign) BOOL isMoving;
37 | @property (nonatomic, strong) UITableView *containTableView;
38 | @end
39 |
40 | @implementation MultiFunctionCell
41 |
42 | - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier containingTableView:(UITableView *)containingTableView leftUtilityButtons:(NSArray *)leftUtilityButtons rightUtilityButtons:(NSArray *)rightUtilityButtons {
43 |
44 | self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
45 |
46 | if (self) {
47 | self.selectionStyle = UITableViewCellSelectionStyleNone;
48 | self.cellHeight = containingTableView.rowHeight;
49 | self.containTableView = containingTableView;
50 |
51 | [self initUI];
52 | self.leftMenus = [NSArray arrayWithArray:leftUtilityButtons];
53 | self.rightMenus = [NSArray arrayWithArray:rightUtilityButtons];
54 | [self addCellView];
55 | }
56 | return self;
57 | }
58 |
59 | - (void)initUI{
60 | self.baseCellView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, ScreenWidth, self.cellHeight)];
61 | self.baseCellView.backgroundColor = [UIColor blackColor];
62 | [self.contentView addSubview:self.baseCellView];
63 | }
64 |
65 | - (void)addCellView{
66 | self.leftMargin = 10+self.leftMenus.count*CellMenuWidth;
67 | self.rightMargin = 0-10-self.rightMenus.count*CellMenuWidth;
68 |
69 | self.cellContentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, self.cellHeight)];
70 | self.cellContentView.backgroundColor = [UIColor clearColor];
71 | [self.baseCellView addSubview:self.cellContentView];
72 |
73 | UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(cellPanGes:)];
74 | panGes.delegate = self;
75 | panGes.delaysTouchesBegan = YES;
76 | panGes.cancelsTouchesInView = NO;
77 | [self.cellContentView addGestureRecognizer:panGes];
78 | }
79 |
80 | - (void)setLeftMenus:(NSArray *)leftMenus{
81 | _leftMenus = leftMenus;
82 |
83 | if (_leftMenus.count > 0) {
84 | self.leftMenuView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CellMenuWidth*_leftMenus.count, self.cellHeight)];
85 | self.leftMenuView.backgroundColor = [UIColor clearColor];
86 | [self.baseCellView addSubview:self.leftMenuView];
87 |
88 | for (NSInteger i = 0; i < _leftMenus.count; i++) {
89 | CGRect frame = CGRectMake(CellMenuWidth*i, 0, CellMenuWidth, self.cellHeight);
90 | UIButton *menuBtn = [self createBtn:frame title:_leftMenus[i] titleColor:[UIColor blueColor] bgcolor:[UIColor greenColor] menuTag:100+i];
91 | [self.leftMenuView addSubview:menuBtn];
92 | }
93 | }
94 | }
95 |
96 | - (void)setRightMenus:(NSArray *)rightMenus{
97 | _rightMenus = rightMenus;
98 |
99 | if (_rightMenus.count > 0) {
100 | self.rightMenuView = [[UIView alloc] initWithFrame:CGRectMake(ScreenWidth-CellMenuWidth*_rightMenus.count, 0, CellMenuWidth*_rightMenus.count, self.cellHeight)];
101 | self.rightMenuView.backgroundColor = [UIColor clearColor];
102 | [self.baseCellView addSubview:self.rightMenuView];
103 |
104 | for (NSInteger i = 0; i < _rightMenus.count; i++) {
105 | CGRect frame = CGRectMake(CellMenuWidth*i, 0, CellMenuWidth, self.cellHeight);
106 | UIButton *menuBtn = [self createBtn:frame title:_rightMenus[i] titleColor:[UIColor whiteColor] bgcolor:[UIColor redColor] menuTag:200+i];
107 | [self.rightMenuView addSubview:menuBtn];
108 | }
109 | }
110 | }
111 |
112 | #pragma mark * UIPanGestureRecognizer delegate
113 | - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
114 | if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
115 | CGPoint translation = [(UIPanGestureRecognizer *)gestureRecognizer translationInView:self];
116 | return fabs(translation.x) > fabs(translation.y);
117 | }
118 | return YES;
119 | }
120 |
121 | - (void)cellPanGes:(UIPanGestureRecognizer *)panGes{
122 | if (self.isMoving) {
123 | return;
124 | }
125 |
126 | if (self.selected) {
127 | [self setSelected:NO animated:NO];
128 | }
129 | CGPoint pointer = [panGes locationInView:self.contentView];
130 | if (panGes.state == UIGestureRecognizerStateBegan) {
131 | self.startX = pointer.x;
132 | self.cellStartX = self.cellContentView.frame.origin.x;
133 | }else if (panGes.state == UIGestureRecognizerStateChanged){
134 | if (self.cellActionDelegate && [self.cellActionDelegate respondsToSelector:@selector(tableMenuWillHideInCell:)]) {
135 | [self.cellActionDelegate tableMenuWillShowInCell:self];
136 | }
137 | [self cellViewMoveToX:self.cellStartX + pointer.x - self.startX];
138 | }else if (panGes.state == UIGestureRecognizerStateCancelled || panGes.state == UIGestureRecognizerStateEnded){
139 | [self resetCellContentView];
140 | return;
141 | }
142 | }
143 |
144 | - (void)cellViewMoveToX:(float)x{
145 | NSLog(@"nowX-->>%f",x);
146 | if (x >= self.leftMargin) {
147 | return;
148 | } else if (x <= self.rightMargin) {
149 | return;
150 | }
151 |
152 | self.cellContentView.frame = CGRectMake(x, 0, ScreenWidth, self.cellHeight);
153 | }
154 |
155 | - (void)resetCellContentView{
156 | float cellX = self.cellContentView.frame.origin.x;
157 | __block MultiFunctionCell *this = self;
158 | if (cellX <= 10 && cellX >= -10) {
159 | self.isMoving = YES;
160 |
161 | if (IsSystemVersionOverSeven) {
162 | [UIView animateWithDuration:0.4f delay:0.0f usingSpringWithDamping:1.0f initialSpringVelocity:0.0f options:UIViewAnimationOptionAllowAnimatedContent animations:^{
163 | this.cellContentView.frame = CGRectMake(0, 0, ScreenWidth, this.cellHeight);
164 | } completion:^(BOOL finished) {
165 | self.isMoving = NO;
166 | this.cellStauts = MultiFunctionCellTypeForNormal;
167 | [self.cellActionDelegate tableMenuDidHideInCell:self];
168 | }];
169 | } else {
170 | [UIView animateWithDuration:0.4 animations:^{
171 | this.cellContentView.frame = CGRectMake(0, 0, ScreenWidth, this.cellHeight);
172 | } completion:^(BOOL finished) {
173 | self.isMoving = NO;
174 | this.cellStauts = MultiFunctionCellTypeForNormal;
175 | [self.cellActionDelegate tableMenuDidHideInCell:self];
176 | }];
177 | }
178 | } else if ( cellX > 10) {
179 | self.isMoving = YES;
180 | if (IsSystemVersionOverSeven >= 7.0) {
181 | [UIView animateWithDuration:0.4f delay:0.0f usingSpringWithDamping:1.0f initialSpringVelocity:0.0f options:UIViewAnimationOptionAllowAnimatedContent animations:^{
182 | this.cellContentView.frame = CGRectMake(self.leftMenus.count*CellMenuWidth, 0, ScreenWidth, this.cellHeight);
183 | } completion:^(BOOL finished) {
184 | self.isMoving = NO;
185 | this.cellStauts = MultiFunctionCellTypeForLeftMenu;
186 | [self.cellActionDelegate tableMenuDidShowInCell:self];
187 | }];
188 | } else {
189 | [UIView animateWithDuration:0.4 animations:^{
190 | this.cellContentView.frame = CGRectMake(self.leftMenus.count*CellMenuWidth, 0, ScreenWidth, this.cellHeight);
191 | } completion:^(BOOL finished) {
192 | self.isMoving = NO;
193 | this.cellStauts = MultiFunctionCellTypeForLeftMenu;
194 | [self.cellActionDelegate tableMenuDidShowInCell:self];
195 | }];
196 | }
197 | } else if (cellX < -10) {
198 | self.isMoving = YES;
199 |
200 | if (IsSystemVersionOverSeven >= 7.0) {
201 | [UIView animateWithDuration:0.4f delay:0.0f usingSpringWithDamping:1.0f initialSpringVelocity:0.0f options:UIViewAnimationOptionAllowAnimatedContent animations:^{
202 | this.cellContentView.frame = CGRectMake(0.0-self.rightMenus.count*CellMenuWidth, 0, ScreenWidth, this.cellHeight);
203 | } completion:^(BOOL finished) {
204 | self.isMoving = NO;
205 | this.cellStauts = MultiFunctionCellTypeForRightMenu;
206 | [self.cellActionDelegate tableMenuDidShowInCell:self];
207 | }];
208 | } else {
209 | [UIView animateWithDuration:0.2 animations:^{
210 | this.cellContentView.frame = CGRectMake(0.0-self.rightMenus.count*CellMenuWidth, 0, ScreenWidth, this.cellHeight);
211 | } completion:^(BOOL finished) {
212 | self.isMoving = NO;
213 | this.cellStauts = MultiFunctionCellTypeForRightMenu;
214 | [self.cellActionDelegate tableMenuDidShowInCell:self];
215 | }];
216 | }
217 | }
218 | }
219 |
220 | - (void)setMenuHidden:(BOOL)hidden animated:(BOOL)animated completionHandler:(void (^)(void))completionHandler{
221 | if (self.selected) {
222 | [self setSelected:NO animated:NO];
223 | }
224 | if (hidden) {
225 | CGRect frame = self.cellContentView.frame;
226 | if (frame.origin.x != 0) {
227 | __block MultiFunctionCell *this = self;
228 |
229 | if (IsSystemVersionOverSeven) {
230 | [UIView animateWithDuration:0.4f delay:0.0f usingSpringWithDamping:1.0f initialSpringVelocity:0.0f options:UIViewAnimationOptionAllowAnimatedContent animations:^{
231 | [this initCellFrame:0];
232 | } completion:^(BOOL finished) {
233 | [this.cellActionDelegate tableMenuDidHideInCell:self];
234 | if (completionHandler) {
235 | completionHandler();
236 | }
237 | }];
238 | } else {
239 | [UIView animateWithDuration:0.2 animations:^{
240 | [self initCellFrame:0];
241 | } completion:^(BOOL finished) {
242 | [self.cellActionDelegate tableMenuDidHideInCell:self];
243 | if (completionHandler) {
244 | completionHandler();
245 | }
246 | }];
247 | }
248 | }
249 | }
250 | }
251 |
252 | - (void)initCellFrame:(float)x{
253 | CGRect frame = self.cellContentView.frame;
254 | frame.origin.x = x;
255 |
256 | self.cellContentView.frame = frame;
257 | }
258 |
259 |
260 | - (UIButton *)createBtn:(CGRect)frame title:(NSString *)title titleColor:(UIColor *)titleColor bgcolor:(UIColor *)bgcolor menuTag:(NSInteger)menuTag{
261 | UIButton *menuBtn = [UIButton buttonWithType:UIButtonTypeCustom];
262 | menuBtn.frame = frame;
263 | [menuBtn setBackgroundColor:bgcolor];
264 | [menuBtn setTitle:title forState:UIControlStateNormal];
265 | [menuBtn setTitleColor:titleColor forState:UIControlStateNormal];
266 | menuBtn.tag = menuTag;
267 | [menuBtn addTarget:self action:@selector(menuClick:) forControlEvents:UIControlEventTouchUpInside];
268 |
269 | return menuBtn;
270 | }
271 |
272 | - (void)menuClick:(id)sender{
273 | UIButton *btn = (UIButton *)sender;
274 | if (self.cellActionDelegate && [self.cellActionDelegate respondsToSelector:@selector(cellMenuIndex:menuIndexNum:isLeftMenu:)]) {
275 | if (btn.tag >= 200) {
276 | [self.cellActionDelegate cellMenuIndex:[self.containTableView indexPathForCell:self] menuIndexNum:btn.tag-200 isLeftMenu:NO];
277 | } else {
278 | [self.cellActionDelegate cellMenuIndex:[self.containTableView indexPathForCell:self] menuIndexNum:btn.tag-100 isLeftMenu:YES];
279 | }
280 | }
281 | }
282 |
283 | - (void)awakeFromNib {
284 | // Initialization code
285 | }
286 |
287 | - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
288 | [super setSelected:selected animated:animated];
289 |
290 | // Configure the view for the selected state
291 | }
292 |
293 | @end
294 |
--------------------------------------------------------------------------------
/XZMultiFunctionCell.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | F8148CE51A5A6E61004809E2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148CE41A5A6E61004809E2 /* main.m */; };
11 | F8148CE81A5A6E61004809E2 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148CE71A5A6E61004809E2 /* AppDelegate.m */; };
12 | F8148CEB1A5A6E61004809E2 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148CEA1A5A6E61004809E2 /* ViewController.m */; };
13 | F8148CEE1A5A6E61004809E2 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F8148CEC1A5A6E61004809E2 /* Main.storyboard */; };
14 | F8148CF01A5A6E61004809E2 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F8148CEF1A5A6E61004809E2 /* Images.xcassets */; };
15 | F8148CF31A5A6E61004809E2 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = F8148CF11A5A6E61004809E2 /* LaunchScreen.xib */; };
16 | F8148CFF1A5A6E61004809E2 /* XZMultiFunctionCellTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148CFE1A5A6E61004809E2 /* XZMultiFunctionCellTests.m */; };
17 | F8148D0B1A5A6EB4004809E2 /* MultiFunctionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148D0A1A5A6EB4004809E2 /* MultiFunctionCell.m */; };
18 | F8148D0E1A5A6ED0004809E2 /* OverLayView.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148D0D1A5A6ED0004809E2 /* OverLayView.m */; };
19 | F8148D141A5A7E46004809E2 /* MultiFunctionTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148D131A5A7E46004809E2 /* MultiFunctionTableView.m */; };
20 | F8148D171A5A7FA9004809E2 /* HomeViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F8148D161A5A7FA9004809E2 /* HomeViewCell.m */; };
21 | /* End PBXBuildFile section */
22 |
23 | /* Begin PBXContainerItemProxy section */
24 | F8148CF91A5A6E61004809E2 /* PBXContainerItemProxy */ = {
25 | isa = PBXContainerItemProxy;
26 | containerPortal = F8148CD71A5A6E61004809E2 /* Project object */;
27 | proxyType = 1;
28 | remoteGlobalIDString = F8148CDE1A5A6E61004809E2;
29 | remoteInfo = XZMultiFunctionCell;
30 | };
31 | /* End PBXContainerItemProxy section */
32 |
33 | /* Begin PBXFileReference section */
34 | F8148CDF1A5A6E61004809E2 /* XZMultiFunctionCell.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XZMultiFunctionCell.app; sourceTree = BUILT_PRODUCTS_DIR; };
35 | F8148CE31A5A6E61004809E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
36 | F8148CE41A5A6E61004809E2 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
37 | F8148CE61A5A6E61004809E2 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
38 | F8148CE71A5A6E61004809E2 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
39 | F8148CE91A5A6E61004809E2 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
40 | F8148CEA1A5A6E61004809E2 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
41 | F8148CED1A5A6E61004809E2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | F8148CEF1A5A6E61004809E2 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
43 | F8148CF21A5A6E61004809E2 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; };
44 | F8148CF81A5A6E61004809E2 /* XZMultiFunctionCellTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XZMultiFunctionCellTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45 | F8148CFD1A5A6E61004809E2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
46 | F8148CFE1A5A6E61004809E2 /* XZMultiFunctionCellTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XZMultiFunctionCellTests.m; sourceTree = ""; };
47 | F8148D091A5A6EB4004809E2 /* MultiFunctionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiFunctionCell.h; sourceTree = ""; };
48 | F8148D0A1A5A6EB4004809E2 /* MultiFunctionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiFunctionCell.m; sourceTree = ""; };
49 | F8148D0C1A5A6ED0004809E2 /* OverLayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverLayView.h; sourceTree = ""; };
50 | F8148D0D1A5A6ED0004809E2 /* OverLayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverLayView.m; sourceTree = ""; };
51 | F8148D121A5A7E46004809E2 /* MultiFunctionTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiFunctionTableView.h; sourceTree = ""; };
52 | F8148D131A5A7E46004809E2 /* MultiFunctionTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiFunctionTableView.m; sourceTree = ""; };
53 | F8148D151A5A7FA9004809E2 /* HomeViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HomeViewCell.h; sourceTree = ""; };
54 | F8148D161A5A7FA9004809E2 /* HomeViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HomeViewCell.m; sourceTree = ""; };
55 | /* End PBXFileReference section */
56 |
57 | /* Begin PBXFrameworksBuildPhase section */
58 | F8148CDC1A5A6E61004809E2 /* Frameworks */ = {
59 | isa = PBXFrameworksBuildPhase;
60 | buildActionMask = 2147483647;
61 | files = (
62 | );
63 | runOnlyForDeploymentPostprocessing = 0;
64 | };
65 | F8148CF51A5A6E61004809E2 /* Frameworks */ = {
66 | isa = PBXFrameworksBuildPhase;
67 | buildActionMask = 2147483647;
68 | files = (
69 | );
70 | runOnlyForDeploymentPostprocessing = 0;
71 | };
72 | /* End PBXFrameworksBuildPhase section */
73 |
74 | /* Begin PBXGroup section */
75 | F8148CD61A5A6E61004809E2 = {
76 | isa = PBXGroup;
77 | children = (
78 | F8148CE11A5A6E61004809E2 /* XZMultiFunctionCell */,
79 | F8148CFB1A5A6E61004809E2 /* XZMultiFunctionCellTests */,
80 | F8148CE01A5A6E61004809E2 /* Products */,
81 | );
82 | sourceTree = "";
83 | };
84 | F8148CE01A5A6E61004809E2 /* Products */ = {
85 | isa = PBXGroup;
86 | children = (
87 | F8148CDF1A5A6E61004809E2 /* XZMultiFunctionCell.app */,
88 | F8148CF81A5A6E61004809E2 /* XZMultiFunctionCellTests.xctest */,
89 | );
90 | name = Products;
91 | sourceTree = "";
92 | };
93 | F8148CE11A5A6E61004809E2 /* XZMultiFunctionCell */ = {
94 | isa = PBXGroup;
95 | children = (
96 | F8148D081A5A6E8D004809E2 /* MultiFunctionCell */,
97 | F8148CE61A5A6E61004809E2 /* AppDelegate.h */,
98 | F8148CE71A5A6E61004809E2 /* AppDelegate.m */,
99 | F8148CE91A5A6E61004809E2 /* ViewController.h */,
100 | F8148CEA1A5A6E61004809E2 /* ViewController.m */,
101 | F8148D151A5A7FA9004809E2 /* HomeViewCell.h */,
102 | F8148D161A5A7FA9004809E2 /* HomeViewCell.m */,
103 | F8148CEC1A5A6E61004809E2 /* Main.storyboard */,
104 | F8148CEF1A5A6E61004809E2 /* Images.xcassets */,
105 | F8148CF11A5A6E61004809E2 /* LaunchScreen.xib */,
106 | F8148CE21A5A6E61004809E2 /* Supporting Files */,
107 | );
108 | path = XZMultiFunctionCell;
109 | sourceTree = "";
110 | };
111 | F8148CE21A5A6E61004809E2 /* Supporting Files */ = {
112 | isa = PBXGroup;
113 | children = (
114 | F8148CE31A5A6E61004809E2 /* Info.plist */,
115 | F8148CE41A5A6E61004809E2 /* main.m */,
116 | );
117 | name = "Supporting Files";
118 | sourceTree = "";
119 | };
120 | F8148CFB1A5A6E61004809E2 /* XZMultiFunctionCellTests */ = {
121 | isa = PBXGroup;
122 | children = (
123 | F8148CFE1A5A6E61004809E2 /* XZMultiFunctionCellTests.m */,
124 | F8148CFC1A5A6E61004809E2 /* Supporting Files */,
125 | );
126 | path = XZMultiFunctionCellTests;
127 | sourceTree = "";
128 | };
129 | F8148CFC1A5A6E61004809E2 /* Supporting Files */ = {
130 | isa = PBXGroup;
131 | children = (
132 | F8148CFD1A5A6E61004809E2 /* Info.plist */,
133 | );
134 | name = "Supporting Files";
135 | sourceTree = "";
136 | };
137 | F8148D081A5A6E8D004809E2 /* MultiFunctionCell */ = {
138 | isa = PBXGroup;
139 | children = (
140 | F8148D091A5A6EB4004809E2 /* MultiFunctionCell.h */,
141 | F8148D0A1A5A6EB4004809E2 /* MultiFunctionCell.m */,
142 | F8148D0C1A5A6ED0004809E2 /* OverLayView.h */,
143 | F8148D0D1A5A6ED0004809E2 /* OverLayView.m */,
144 | F8148D121A5A7E46004809E2 /* MultiFunctionTableView.h */,
145 | F8148D131A5A7E46004809E2 /* MultiFunctionTableView.m */,
146 | );
147 | path = MultiFunctionCell;
148 | sourceTree = "";
149 | };
150 | /* End PBXGroup section */
151 |
152 | /* Begin PBXNativeTarget section */
153 | F8148CDE1A5A6E61004809E2 /* XZMultiFunctionCell */ = {
154 | isa = PBXNativeTarget;
155 | buildConfigurationList = F8148D021A5A6E61004809E2 /* Build configuration list for PBXNativeTarget "XZMultiFunctionCell" */;
156 | buildPhases = (
157 | F8148CDB1A5A6E61004809E2 /* Sources */,
158 | F8148CDC1A5A6E61004809E2 /* Frameworks */,
159 | F8148CDD1A5A6E61004809E2 /* Resources */,
160 | );
161 | buildRules = (
162 | );
163 | dependencies = (
164 | );
165 | name = XZMultiFunctionCell;
166 | productName = XZMultiFunctionCell;
167 | productReference = F8148CDF1A5A6E61004809E2 /* XZMultiFunctionCell.app */;
168 | productType = "com.apple.product-type.application";
169 | };
170 | F8148CF71A5A6E61004809E2 /* XZMultiFunctionCellTests */ = {
171 | isa = PBXNativeTarget;
172 | buildConfigurationList = F8148D051A5A6E61004809E2 /* Build configuration list for PBXNativeTarget "XZMultiFunctionCellTests" */;
173 | buildPhases = (
174 | F8148CF41A5A6E61004809E2 /* Sources */,
175 | F8148CF51A5A6E61004809E2 /* Frameworks */,
176 | F8148CF61A5A6E61004809E2 /* Resources */,
177 | );
178 | buildRules = (
179 | );
180 | dependencies = (
181 | F8148CFA1A5A6E61004809E2 /* PBXTargetDependency */,
182 | );
183 | name = XZMultiFunctionCellTests;
184 | productName = XZMultiFunctionCellTests;
185 | productReference = F8148CF81A5A6E61004809E2 /* XZMultiFunctionCellTests.xctest */;
186 | productType = "com.apple.product-type.bundle.unit-test";
187 | };
188 | /* End PBXNativeTarget section */
189 |
190 | /* Begin PBXProject section */
191 | F8148CD71A5A6E61004809E2 /* Project object */ = {
192 | isa = PBXProject;
193 | attributes = {
194 | LastUpgradeCheck = 0610;
195 | ORGANIZATIONNAME = xiazer;
196 | TargetAttributes = {
197 | F8148CDE1A5A6E61004809E2 = {
198 | CreatedOnToolsVersion = 6.1.1;
199 | };
200 | F8148CF71A5A6E61004809E2 = {
201 | CreatedOnToolsVersion = 6.1.1;
202 | TestTargetID = F8148CDE1A5A6E61004809E2;
203 | };
204 | };
205 | };
206 | buildConfigurationList = F8148CDA1A5A6E61004809E2 /* Build configuration list for PBXProject "XZMultiFunctionCell" */;
207 | compatibilityVersion = "Xcode 3.2";
208 | developmentRegion = English;
209 | hasScannedForEncodings = 0;
210 | knownRegions = (
211 | en,
212 | Base,
213 | );
214 | mainGroup = F8148CD61A5A6E61004809E2;
215 | productRefGroup = F8148CE01A5A6E61004809E2 /* Products */;
216 | projectDirPath = "";
217 | projectRoot = "";
218 | targets = (
219 | F8148CDE1A5A6E61004809E2 /* XZMultiFunctionCell */,
220 | F8148CF71A5A6E61004809E2 /* XZMultiFunctionCellTests */,
221 | );
222 | };
223 | /* End PBXProject section */
224 |
225 | /* Begin PBXResourcesBuildPhase section */
226 | F8148CDD1A5A6E61004809E2 /* Resources */ = {
227 | isa = PBXResourcesBuildPhase;
228 | buildActionMask = 2147483647;
229 | files = (
230 | F8148CEE1A5A6E61004809E2 /* Main.storyboard in Resources */,
231 | F8148CF31A5A6E61004809E2 /* LaunchScreen.xib in Resources */,
232 | F8148CF01A5A6E61004809E2 /* Images.xcassets in Resources */,
233 | );
234 | runOnlyForDeploymentPostprocessing = 0;
235 | };
236 | F8148CF61A5A6E61004809E2 /* Resources */ = {
237 | isa = PBXResourcesBuildPhase;
238 | buildActionMask = 2147483647;
239 | files = (
240 | );
241 | runOnlyForDeploymentPostprocessing = 0;
242 | };
243 | /* End PBXResourcesBuildPhase section */
244 |
245 | /* Begin PBXSourcesBuildPhase section */
246 | F8148CDB1A5A6E61004809E2 /* Sources */ = {
247 | isa = PBXSourcesBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | F8148CEB1A5A6E61004809E2 /* ViewController.m in Sources */,
251 | F8148D141A5A7E46004809E2 /* MultiFunctionTableView.m in Sources */,
252 | F8148D0E1A5A6ED0004809E2 /* OverLayView.m in Sources */,
253 | F8148CE81A5A6E61004809E2 /* AppDelegate.m in Sources */,
254 | F8148D171A5A7FA9004809E2 /* HomeViewCell.m in Sources */,
255 | F8148CE51A5A6E61004809E2 /* main.m in Sources */,
256 | F8148D0B1A5A6EB4004809E2 /* MultiFunctionCell.m in Sources */,
257 | );
258 | runOnlyForDeploymentPostprocessing = 0;
259 | };
260 | F8148CF41A5A6E61004809E2 /* Sources */ = {
261 | isa = PBXSourcesBuildPhase;
262 | buildActionMask = 2147483647;
263 | files = (
264 | F8148CFF1A5A6E61004809E2 /* XZMultiFunctionCellTests.m in Sources */,
265 | );
266 | runOnlyForDeploymentPostprocessing = 0;
267 | };
268 | /* End PBXSourcesBuildPhase section */
269 |
270 | /* Begin PBXTargetDependency section */
271 | F8148CFA1A5A6E61004809E2 /* PBXTargetDependency */ = {
272 | isa = PBXTargetDependency;
273 | target = F8148CDE1A5A6E61004809E2 /* XZMultiFunctionCell */;
274 | targetProxy = F8148CF91A5A6E61004809E2 /* PBXContainerItemProxy */;
275 | };
276 | /* End PBXTargetDependency section */
277 |
278 | /* Begin PBXVariantGroup section */
279 | F8148CEC1A5A6E61004809E2 /* Main.storyboard */ = {
280 | isa = PBXVariantGroup;
281 | children = (
282 | F8148CED1A5A6E61004809E2 /* Base */,
283 | );
284 | name = Main.storyboard;
285 | sourceTree = "";
286 | };
287 | F8148CF11A5A6E61004809E2 /* LaunchScreen.xib */ = {
288 | isa = PBXVariantGroup;
289 | children = (
290 | F8148CF21A5A6E61004809E2 /* Base */,
291 | );
292 | name = LaunchScreen.xib;
293 | sourceTree = "";
294 | };
295 | /* End PBXVariantGroup section */
296 |
297 | /* Begin XCBuildConfiguration section */
298 | F8148D001A5A6E61004809E2 /* Debug */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ALWAYS_SEARCH_USER_PATHS = NO;
302 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
303 | CLANG_CXX_LIBRARY = "libc++";
304 | CLANG_ENABLE_MODULES = YES;
305 | CLANG_ENABLE_OBJC_ARC = YES;
306 | CLANG_WARN_BOOL_CONVERSION = YES;
307 | CLANG_WARN_CONSTANT_CONVERSION = YES;
308 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
309 | CLANG_WARN_EMPTY_BODY = YES;
310 | CLANG_WARN_ENUM_CONVERSION = YES;
311 | CLANG_WARN_INT_CONVERSION = YES;
312 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
313 | CLANG_WARN_UNREACHABLE_CODE = YES;
314 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
315 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
316 | COPY_PHASE_STRIP = NO;
317 | ENABLE_STRICT_OBJC_MSGSEND = YES;
318 | GCC_C_LANGUAGE_STANDARD = gnu99;
319 | GCC_DYNAMIC_NO_PIC = NO;
320 | GCC_OPTIMIZATION_LEVEL = 0;
321 | GCC_PREPROCESSOR_DEFINITIONS = (
322 | "DEBUG=1",
323 | "$(inherited)",
324 | );
325 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
326 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
327 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
328 | GCC_WARN_UNDECLARED_SELECTOR = YES;
329 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
330 | GCC_WARN_UNUSED_FUNCTION = YES;
331 | GCC_WARN_UNUSED_VARIABLE = YES;
332 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
333 | MTL_ENABLE_DEBUG_INFO = YES;
334 | ONLY_ACTIVE_ARCH = YES;
335 | SDKROOT = iphoneos;
336 | };
337 | name = Debug;
338 | };
339 | F8148D011A5A6E61004809E2 /* Release */ = {
340 | isa = XCBuildConfiguration;
341 | buildSettings = {
342 | ALWAYS_SEARCH_USER_PATHS = NO;
343 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
344 | CLANG_CXX_LIBRARY = "libc++";
345 | CLANG_ENABLE_MODULES = YES;
346 | CLANG_ENABLE_OBJC_ARC = YES;
347 | CLANG_WARN_BOOL_CONVERSION = YES;
348 | CLANG_WARN_CONSTANT_CONVERSION = YES;
349 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
350 | CLANG_WARN_EMPTY_BODY = YES;
351 | CLANG_WARN_ENUM_CONVERSION = YES;
352 | CLANG_WARN_INT_CONVERSION = YES;
353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
354 | CLANG_WARN_UNREACHABLE_CODE = YES;
355 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
356 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
357 | COPY_PHASE_STRIP = YES;
358 | ENABLE_NS_ASSERTIONS = NO;
359 | ENABLE_STRICT_OBJC_MSGSEND = YES;
360 | GCC_C_LANGUAGE_STANDARD = gnu99;
361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
363 | GCC_WARN_UNDECLARED_SELECTOR = YES;
364 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
365 | GCC_WARN_UNUSED_FUNCTION = YES;
366 | GCC_WARN_UNUSED_VARIABLE = YES;
367 | IPHONEOS_DEPLOYMENT_TARGET = 8.1;
368 | MTL_ENABLE_DEBUG_INFO = NO;
369 | SDKROOT = iphoneos;
370 | VALIDATE_PRODUCT = YES;
371 | };
372 | name = Release;
373 | };
374 | F8148D031A5A6E61004809E2 /* Debug */ = {
375 | isa = XCBuildConfiguration;
376 | buildSettings = {
377 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
378 | INFOPLIST_FILE = XZMultiFunctionCell/Info.plist;
379 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
380 | PRODUCT_NAME = "$(TARGET_NAME)";
381 | };
382 | name = Debug;
383 | };
384 | F8148D041A5A6E61004809E2 /* Release */ = {
385 | isa = XCBuildConfiguration;
386 | buildSettings = {
387 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
388 | INFOPLIST_FILE = XZMultiFunctionCell/Info.plist;
389 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
390 | PRODUCT_NAME = "$(TARGET_NAME)";
391 | };
392 | name = Release;
393 | };
394 | F8148D061A5A6E61004809E2 /* Debug */ = {
395 | isa = XCBuildConfiguration;
396 | buildSettings = {
397 | BUNDLE_LOADER = "$(TEST_HOST)";
398 | FRAMEWORK_SEARCH_PATHS = (
399 | "$(SDKROOT)/Developer/Library/Frameworks",
400 | "$(inherited)",
401 | );
402 | GCC_PREPROCESSOR_DEFINITIONS = (
403 | "DEBUG=1",
404 | "$(inherited)",
405 | );
406 | INFOPLIST_FILE = XZMultiFunctionCellTests/Info.plist;
407 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
408 | PRODUCT_NAME = "$(TARGET_NAME)";
409 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XZMultiFunctionCell.app/XZMultiFunctionCell";
410 | };
411 | name = Debug;
412 | };
413 | F8148D071A5A6E61004809E2 /* Release */ = {
414 | isa = XCBuildConfiguration;
415 | buildSettings = {
416 | BUNDLE_LOADER = "$(TEST_HOST)";
417 | FRAMEWORK_SEARCH_PATHS = (
418 | "$(SDKROOT)/Developer/Library/Frameworks",
419 | "$(inherited)",
420 | );
421 | INFOPLIST_FILE = XZMultiFunctionCellTests/Info.plist;
422 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
423 | PRODUCT_NAME = "$(TARGET_NAME)";
424 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/XZMultiFunctionCell.app/XZMultiFunctionCell";
425 | };
426 | name = Release;
427 | };
428 | /* End XCBuildConfiguration section */
429 |
430 | /* Begin XCConfigurationList section */
431 | F8148CDA1A5A6E61004809E2 /* Build configuration list for PBXProject "XZMultiFunctionCell" */ = {
432 | isa = XCConfigurationList;
433 | buildConfigurations = (
434 | F8148D001A5A6E61004809E2 /* Debug */,
435 | F8148D011A5A6E61004809E2 /* Release */,
436 | );
437 | defaultConfigurationIsVisible = 0;
438 | defaultConfigurationName = Release;
439 | };
440 | F8148D021A5A6E61004809E2 /* Build configuration list for PBXNativeTarget "XZMultiFunctionCell" */ = {
441 | isa = XCConfigurationList;
442 | buildConfigurations = (
443 | F8148D031A5A6E61004809E2 /* Debug */,
444 | F8148D041A5A6E61004809E2 /* Release */,
445 | );
446 | defaultConfigurationIsVisible = 0;
447 | };
448 | F8148D051A5A6E61004809E2 /* Build configuration list for PBXNativeTarget "XZMultiFunctionCellTests" */ = {
449 | isa = XCConfigurationList;
450 | buildConfigurations = (
451 | F8148D061A5A6E61004809E2 /* Debug */,
452 | F8148D071A5A6E61004809E2 /* Release */,
453 | );
454 | defaultConfigurationIsVisible = 0;
455 | };
456 | /* End XCConfigurationList section */
457 | };
458 | rootObject = F8148CD71A5A6E61004809E2 /* Project object */;
459 | }
460 |
--------------------------------------------------------------------------------