├── screenshot.png
├── GWQuestionnaireDemo
├── en.lproj
│ └── InfoPlist.strings
├── GWQuestionnaire
│ ├── checked.png
│ ├── unchecked.png
│ ├── GWQuestionnaire.h
│ ├── GWQuestionnaireCells
│ │ ├── GWQuestionnaireCellSelection.h
│ │ ├── GWQuestionnaireCellRate.h
│ │ ├── GWQuestionnaireCellTextField.h
│ │ ├── GWQuestionnaireCellTextField.m
│ │ ├── GWQuestionnaireCellSelection.xib
│ │ ├── GWQuestionnaireCellRate.xib
│ │ ├── GWQuestionnaireCellTextField.xib
│ │ ├── GWQuestionnaireCellRate.m
│ │ └── GWQuestionnaireCellSelection.m
│ ├── GWQuestionnaireItem
│ │ ├── GWQuestionnaireItem.m
│ │ └── GWQuestionnaireItem.h
│ └── GWQuestionnaire.m
├── ViewController.h
├── AppDelegate.h
├── main.m
├── GWQuestionnaireDemo-Prefix.pch
├── Images.xcassets
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── LaunchImage.launchimage
│ │ └── Contents.json
├── Base.lproj
│ ├── Main_iPhone.storyboard
│ └── Main_iPad.storyboard
├── GWQuestionnaireDemo-Info.plist
├── AppDelegate.m
└── ViewController.m
├── GWQuestionnaireDemoTests
├── en.lproj
│ └── InfoPlist.strings
├── GWQuestionnaireDemoTests-Info.plist
└── GWQuestionnaireDemoTests.m
├── GWQuestionnaireDemo.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcuserdata
│ │ └── grzegorzwojcik.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcshareddata
│ │ └── GWQuestionnaireDemo.xccheckout
├── xcuserdata
│ └── grzegorzwojcik.xcuserdatad
│ │ └── xcschemes
│ │ ├── xcschememanagement.plist
│ │ └── GWQuestionnaireDemo.xcscheme
└── project.pbxproj
└── README.md
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wojczitsu/GWQuestionnaire/HEAD/screenshot.png
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemoTests/en.lproj/InfoPlist.strings:
--------------------------------------------------------------------------------
1 | /* Localized versions of Info.plist keys */
2 |
3 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/checked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wojczitsu/GWQuestionnaire/HEAD/GWQuestionnaireDemo/GWQuestionnaire/checked.png
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/unchecked.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wojczitsu/GWQuestionnaire/HEAD/GWQuestionnaireDemo/GWQuestionnaire/unchecked.png
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/project.xcworkspace/xcuserdata/grzegorzwojcik.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wojczitsu/GWQuestionnaire/HEAD/GWQuestionnaireDemo.xcodeproj/project.xcworkspace/xcuserdata/grzegorzwojcik.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // GWQuestionnaireDemo
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : UIViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // GWQuestionnaireDemo
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : UIResponder
12 |
13 | @property (strong, nonatomic) UIWindow *window;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // GWQuestionnaireDemo
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "AppDelegate.h"
12 |
13 | int main(int argc, char * argv[])
14 | {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaireDemo-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header
3 | //
4 | // The contents of this file are implicitly included at the beginning of every source file.
5 | //
6 |
7 | #import
8 |
9 | #ifndef __IPHONE_5_0
10 | #warning "This project uses features only available in iOS SDK 5.0 and later."
11 | #endif
12 |
13 | #ifdef __OBJC__
14 | #import
15 | #import
16 | #endif
17 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaire.h:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaire.h
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 | #import
8 | #import "GWQuestionnaireItem.h"
9 | @interface GWQuestionnaire : UITableViewController
10 | // contains GWQuestionnaireItem (questions with answers)
11 | @property (nonatomic, strong) NSMutableArray *surveyItems;
12 |
13 | - (id)initWithItems:(NSMutableArray*)items;
14 | -(BOOL)isCompleted;
15 | @end
16 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellSelection.h:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellSelection.h
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 |
8 | #import
9 | #import "GWQuestionnaireItem.h"
10 | #import "GWQuestionnaire.h"
11 | @interface GWQuestionnaireCellSelection : UITableViewCell
12 | @property (nonatomic, weak) IBOutlet UIView *container;
13 |
14 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r;
15 | -(void)setOwner:(GWQuestionnaire*)val;
16 | @end
17 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellRate.h:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellRate.h
3 | //
4 | // Created by Grzegorz Wójcik on 10.03.2014.
5 | //
6 | //
7 |
8 | #import
9 | #import "GWQuestionnaireItem.h"
10 | #import "GWQuestionnaire.h"
11 | @interface GWQuestionnaireCellRate : UITableViewCell
12 | @property (nonatomic, weak) IBOutlet UIView *container;
13 |
14 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r parentWidth:(int)width;
15 | -(void)setOwner:(GWQuestionnaire*)val;
16 | @end
17 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellTextField.h:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellTextField.h
3 | //
4 | // Created by Grzegorz Wójcik on 10.03.2014.
5 | //
6 | //
7 |
8 | #import
9 | #import "GWQuestionnaireItem.h"
10 | #import "GWQuestionnaire.h"
11 |
12 | @interface GWQuestionnaireCellTextField : UITableViewCell
13 | @property (nonatomic, weak) IBOutlet UITextField *textField;
14 |
15 | -(void)setOwner:(GWQuestionnaire*)val;
16 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r;
17 | @end
18 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireItem/GWQuestionnaireItem.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireItem.m
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 |
8 | #import "GWQuestionnaireItem.h"
9 |
10 | @implementation GWQuestionnaireItem
11 | -(id)initWithQuestion:(NSString*)question answers:(NSArray*)answers type:(GWQuestionnaireItemType)type
12 | {
13 | self = [super init];
14 | if (self) {
15 | [self setQuestion:question];
16 | [self setAnswers:answers];
17 | [self setType:type];
18 | }
19 | return self;
20 | }
21 |
22 | -(void)dealloc
23 | {
24 | self.question = nil;
25 | self.answers = nil;
26 | self.userAnswer = nil;
27 | }
28 | @end
29 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/xcuserdata/grzegorzwojcik.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | GWQuestionnaireDemo.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | D48B3AFB18CDFA7800903A1C
16 |
17 | primary
18 |
19 |
20 | D48B3B1F18CDFA7800903A1C
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemoTests/GWQuestionnaireDemoTests-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | ${EXECUTABLE_NAME}
9 | CFBundleIdentifier
10 | com.wojczitsu.${PRODUCT_NAME:rfc1034identifier}
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 1.0
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireItem/GWQuestionnaireItem.h:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireItem.h
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 |
8 | #import
9 |
10 | typedef enum {
11 | GWQuestionnaireSingleChoice,
12 | GWQuestionnaireMultipleChoice,
13 | GWQuestionnaireOpenQuestion,
14 | GWQuestionnaireRateQuestion,
15 | } GWQuestionnaireItemType;
16 |
17 | @interface GWQuestionnaireItem : NSObject
18 | // Question text
19 | @property (nonatomic, strong) NSString *question;
20 | // Possible choices
21 | @property (nonatomic, strong) NSArray *answers;
22 | // Open answer text
23 | @property (nonatomic, strong) NSString *userAnswer;
24 |
25 | @property (assign) GWQuestionnaireItemType type;
26 |
27 | -(id)initWithQuestion:(NSString*)question answers:(NSArray*)answers type:(GWQuestionnaireItemType)type;
28 | @end
29 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemoTests/GWQuestionnaireDemoTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireDemoTests.m
3 | // GWQuestionnaireDemoTests
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface GWQuestionnaireDemoTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation GWQuestionnaireDemoTests
16 |
17 | - (void)setUp
18 | {
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 | {
25 | // Put teardown code here. This method is called after the invocation of each test method in the class.
26 | [super tearDown];
27 | }
28 |
29 | - (void)testExample
30 | {
31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
32 | }
33 |
34 | @end
35 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/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" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "ipad",
20 | "size" : "29x29",
21 | "scale" : "1x"
22 | },
23 | {
24 | "idiom" : "ipad",
25 | "size" : "29x29",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "ipad",
30 | "size" : "40x40",
31 | "scale" : "1x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "40x40",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "76x76",
41 | "scale" : "1x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "76x76",
46 | "scale" : "2x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | },
18 | {
19 | "orientation" : "portrait",
20 | "idiom" : "ipad",
21 | "extent" : "full-screen",
22 | "minimum-system-version" : "7.0",
23 | "scale" : "1x"
24 | },
25 | {
26 | "orientation" : "landscape",
27 | "idiom" : "ipad",
28 | "extent" : "full-screen",
29 | "minimum-system-version" : "7.0",
30 | "scale" : "1x"
31 | },
32 | {
33 | "orientation" : "portrait",
34 | "idiom" : "ipad",
35 | "extent" : "full-screen",
36 | "minimum-system-version" : "7.0",
37 | "scale" : "2x"
38 | },
39 | {
40 | "orientation" : "landscape",
41 | "idiom" : "ipad",
42 | "extent" : "full-screen",
43 | "minimum-system-version" : "7.0",
44 | "scale" : "2x"
45 | }
46 | ],
47 | "info" : {
48 | "version" : 1,
49 | "author" : "xcode"
50 | }
51 | }
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellTextField.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellTextField.m
3 | //
4 | // Created by Grzegorz Wójcik on 10.03.2014.
5 | //
6 | //
7 |
8 | #import "GWQuestionnaireCellTextField.h"
9 | @interface GWQuestionnaireCellTextField ()
10 | {
11 | GWQuestionnaire *owner;
12 | int row;
13 | }
14 | @end
15 | @implementation GWQuestionnaireCellTextField
16 |
17 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r
18 | {
19 | row = r;
20 | [self.textField setText:item.userAnswer];
21 | [self setDefaultText];
22 | }
23 | -(void)setDefaultText
24 | {
25 | if(!_textField.text || [_textField.text length] == 0)
26 | {
27 | _textField.text = NSLocalizedString(@"Your answer...",nil);
28 | }
29 | }
30 | -(void)setOwner:(GWQuestionnaire*)val
31 | {
32 | owner = val;
33 | }
34 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
35 | {
36 | [_textField resignFirstResponder];
37 | }
38 | #pragma mark UITextField delegate
39 | - (void)textFieldDidEndEditing:(UITextField *)textField
40 | {
41 | [owner performSelector:@selector(surveyCellUserAnswerChanged:atIndex:) withObject:self.textField.text withObject:[NSNumber numberWithInt:row]];
42 | [self setDefaultText];
43 | }
44 | -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
45 | {
46 | if([_textField.text isEqualToString:NSLocalizedString(@"Your answer...",nil)])
47 | _textField.text = @"";
48 | return YES;
49 | }
50 |
51 | - (BOOL)textFieldShouldReturn:(UITextField *)textField
52 | {
53 | [_textField resignFirstResponder];
54 | return YES;
55 | }
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/Base.lproj/Main_iPhone.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 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/Base.lproj/Main_iPad.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 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/project.xcworkspace/xcshareddata/GWQuestionnaireDemo.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | AD9CF253-4E32-4B19-8712-909AD878169A
9 | IDESourceControlProjectName
10 | GWQuestionnaireDemo
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | 87A3D6E8-F34F-4A87-833A-861A029AA70A
14 | https://github.com/wojczitsu/GWQuestionnaire.git
15 |
16 | IDESourceControlProjectPath
17 | GWQuestionnaireDemo.xcodeproj/project.xcworkspace
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | 87A3D6E8-F34F-4A87-833A-861A029AA70A
21 | ../..
22 |
23 | IDESourceControlProjectURL
24 | https://github.com/wojczitsu/GWQuestionnaire.git
25 | IDESourceControlProjectVersion
26 | 110
27 | IDESourceControlProjectWCCIdentifier
28 | 87A3D6E8-F34F-4A87-833A-861A029AA70A
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | 87A3D6E8-F34F-4A87-833A-861A029AA70A
36 | IDESourceControlWCCName
37 | GWQuestionnaireDemo
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaireDemo-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIdentifier
12 | com.wojczitsu.${PRODUCT_NAME:rfc1034identifier}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${PRODUCT_NAME}
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.0
25 | LSRequiresIPhoneOS
26 |
27 | UIMainStoryboardFile
28 | Main_iPhone
29 | UIMainStoryboardFile~ipad
30 | Main_iPad
31 | UIRequiredDeviceCapabilities
32 |
33 | armv7
34 |
35 | UISupportedInterfaceOrientations
36 |
37 | UIInterfaceOrientationPortrait
38 | UIInterfaceOrientationLandscapeLeft
39 | UIInterfaceOrientationLandscapeRight
40 |
41 | UISupportedInterfaceOrientations~ipad
42 |
43 | UIInterfaceOrientationPortrait
44 | UIInterfaceOrientationPortraitUpsideDown
45 | UIInterfaceOrientationLandscapeLeft
46 | UIInterfaceOrientationLandscapeRight
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellSelection.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 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellRate.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 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // GWQuestionnaireDemo
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @implementation AppDelegate
12 |
13 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
14 | {
15 | // Override point for customization after application launch.
16 | return YES;
17 | }
18 |
19 | - (void)applicationWillResignActive:(UIApplication *)application
20 | {
21 | // 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.
22 | // 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.
23 | }
24 |
25 | - (void)applicationDidEnterBackground:(UIApplication *)application
26 | {
27 | // 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.
28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
29 | }
30 |
31 | - (void)applicationWillEnterForeground:(UIApplication *)application
32 | {
33 | // 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.
34 | }
35 |
36 | - (void)applicationDidBecomeActive:(UIApplication *)application
37 | {
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 | {
43 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
44 | }
45 |
46 | @end
47 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellTextField.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 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/xcuserdata/grzegorzwojcik.xcuserdatad/xcschemes/GWQuestionnaireDemo.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
49 |
50 |
51 |
52 |
61 |
62 |
68 |
69 |
70 |
71 |
72 |
73 |
79 |
80 |
86 |
87 |
88 |
89 |
91 |
92 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # GWQuestionnaire - easy questionnaires and surveys solution for iOS
2 | -----------------------
3 | 
4 |
5 | ### How to use it
6 |
7 | Creating survey/questionnaire:
8 |
9 | NSMutableArray *questions = [NSMutableArray array];
10 |
11 | NSDictionary *a1 = [NSDictionary dictionaryWithObjectsAndKeys:@"YES",@"text",
12 | [NSNumber numberWithBool:NO],@"marked", nil];
13 | NSDictionary *a2 = [NSDictionary dictionaryWithObjectsAndKeys:@"NO",@"text",
14 | [NSNumber numberWithBool:NO],@"marked", nil];
15 | NSDictionary *a3 = [NSDictionary dictionaryWithObjectsAndKeys:@"A",@"text",
16 | [NSNumber numberWithBool:NO],@"marked", nil];
17 | NSDictionary *a4 = [NSDictionary dictionaryWithObjectsAndKeys:@"B",@"text",
18 | [NSNumber numberWithBool:NO],@"marked", nil];
19 | NSDictionary *a5 = [NSDictionary dictionaryWithObjectsAndKeys:@"C",@"text",
20 | [NSNumber numberWithBool:NO],@"marked", nil];
21 | NSDictionary *a6 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"text",
22 | [NSNumber numberWithBool:NO],@"marked", nil];
23 | NSDictionary *a7 = [NSDictionary dictionaryWithObjectsAndKeys:@"2",@"text",
24 | [NSNumber numberWithBool:NO],@"marked", nil];
25 | NSDictionary *a8 = [NSDictionary dictionaryWithObjectsAndKeys:@"3",@"text",
26 | [NSNumber numberWithBool:NO],@"marked", nil];
27 | NSDictionary *a9 = [NSDictionary dictionaryWithObjectsAndKeys:@"4",@"text",
28 | [NSNumber numberWithBool:NO],@"marked", nil];
29 |
30 |
31 | // single choice question
32 | GWQuestionnaireItem *item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Single choice question ?"
33 | answers:[NSArray arrayWithObjects:a1,a2, nil]
34 | type:GWQuestionnaireSingleChoice];
35 | [questions addObject:item];
36 |
37 | // multiple choice question
38 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Multiple choice question ?"
39 | answers:[NSArray arrayWithObjects:a3,a4,a5, nil]
40 | type:GWQuestionnaireMultipleChoice];
41 | [questions addObject:item];
42 |
43 | // "Rate" question
44 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Rate it:"
45 | answers:[NSArray arrayWithObjects:a6,a7,a8,a9, nil]
46 | type:GWQuestionnaireRateQuestion];
47 | [questions addObject:item];
48 |
49 | // "open" question
50 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Type your answer:"
51 | answers:nil
52 | type:GWQuestionnaireOpenQuestion];
53 | [questions addObject:item];
54 |
55 | surveyController = [[GWQuestionnaire alloc] initWithItems:questions];
56 | surveyController.view.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20);
57 | [self.view addSubview:surveyController.view];
58 |
59 | Getting results from it:
60 |
61 | // NSLog answers
62 | for(GWQuestionnaireItem *item in surveyController.surveyItems)
63 | {
64 | NSLog(@"-----------------");
65 | NSLog(@"%@",item.question);
66 | NSLog(@"-----------------");
67 | if(item.type == GWQuestionnaireOpenQuestion)
68 | NSLog(@"Answer: %@", item.userAnswer);
69 | else
70 | for(NSDictionary *dict in item.answers)
71 | {
72 | NSLog(@"%d - %@",[[dict objectForKey:@"marked"]boolValue], [dict objectForKey:@"text"]);
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellRate.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellRate.m
3 | //
4 | // Created by Grzegorz Wójcik on 10.03.2014.
5 | //
6 | //
7 |
8 | #import "GWQuestionnaireCellRate.h"
9 | @interface GWQuestionnaireCellRate ()
10 | {
11 | NSMutableArray *answers;
12 | GWQuestionnaire *owner;
13 | int row;
14 | int itemWidth;
15 | }
16 | @end
17 |
18 | @implementation GWQuestionnaireCellRate
19 | - (void)awakeFromNib
20 | {
21 | [super awakeFromNib];
22 | [self.container.layer setCornerRadius:8.0];
23 | [self.container.layer setBorderColor:[UIColor lightGrayColor].CGColor];
24 | [self.container.layer setBorderWidth:1.0];
25 | }
26 |
27 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r parentWidth:(int)width
28 | {
29 | width -= 40;
30 | row = r;
31 | answers = [NSMutableArray arrayWithArray:item.answers];
32 | [self.container.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
33 | itemWidth = width / item.answers.count;
34 |
35 | for(int i=0; i < [item.answers count]; i++)
36 | {
37 | NSDictionary *option = [item.answers objectAtIndex:i];
38 | UIView *subview = [self createOptionView:option index:i];
39 | [self.container addSubview:subview];
40 | }
41 | }
42 | -(void)setOwner:(GWQuestionnaire*)val
43 | {
44 | owner = val;
45 | }
46 | -(UIView*)createOptionView:(NSDictionary*)dict index:(int)index
47 | {
48 | UIView *v = [[UIView alloc] initWithFrame:CGRectMake(index * itemWidth, 0, itemWidth,self.frame.size.height)];
49 | [v setBackgroundColor:[UIColor clearColor]];
50 |
51 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
52 | btn.tag = index;
53 | [btn addTarget:self action:@selector(checboxPressed:) forControlEvents:UIControlEventTouchUpInside];
54 |
55 | if(![[dict objectForKey:@"marked"] boolValue])
56 | [btn setImage:[UIImage imageNamed:@"unchecked"] forState:UIControlStateNormal];
57 | else
58 | [btn setImage:[UIImage imageNamed:@"checked"] forState:UIControlStateNormal];
59 | int btnH = 41;
60 | int btnW = 41;
61 | btn.frame = CGRectMake((v.frame.size.width - btnW)/2, 5, btnW, btnH);
62 | [v addSubview:btn];
63 |
64 | UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, btn.frame.origin.y + btn.frame.size.height,
65 | v.frame.size.width, v.frame.size.height - (btn.frame.origin.y + btn.frame.size.height))];
66 | [lbl setNumberOfLines:0];
67 | [lbl setFont:[UIFont systemFontOfSize:15.0]];
68 | [lbl setBackgroundColor:[UIColor clearColor]];
69 | [lbl setText:[dict objectForKey:@"text"]];
70 | [lbl setTextAlignment:NSTextAlignmentCenter];
71 | [v addSubview:lbl];
72 | return v;
73 | }
74 |
75 | -(void)checboxPressed:(id)sender
76 | {
77 | UIButton *btn = (UIButton*)sender;
78 |
79 | if([[[answers objectAtIndex:[btn tag]] objectForKey:@"marked"] boolValue])
80 | {
81 | [btn setImage:[UIImage imageNamed:@"unchecked"] forState:UIControlStateNormal];
82 | NSDictionary *old = [answers objectAtIndex:[btn tag]];
83 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:NO],@"marked", nil];
84 | [answers replaceObjectAtIndex:[btn tag] withObject:newD];
85 | }
86 | else
87 | {
88 | for(UIView *containerSubview in self.container.subviews)
89 | {
90 | for(UIView *subview in containerSubview.subviews)
91 | {
92 | if([subview isKindOfClass:[UIButton class]])
93 | {
94 | UIButton *btn = (UIButton*)subview;
95 | [btn setImage:[UIImage imageNamed:@"unchecked"] forState:UIControlStateNormal];
96 | NSDictionary *old = [answers objectAtIndex:[btn tag]];
97 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:NO],@"marked", nil];
98 | [answers replaceObjectAtIndex:[btn tag] withObject:newD];
99 | }
100 | }
101 | }
102 |
103 | [btn setImage:[UIImage imageNamed:@"checked"] forState:UIControlStateNormal];
104 | NSDictionary *old = [answers objectAtIndex:[btn tag]];
105 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:YES],@"marked", nil];
106 | [answers replaceObjectAtIndex:[btn tag] withObject:newD];
107 | }
108 | [owner performSelector:@selector(surveyCellSelectionChanged:atIndex:) withObject:answers withObject:[NSNumber numberWithInt:row]];
109 | }
110 |
111 |
112 | @end
113 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // GWQuestionnaireDemo
4 | //
5 | // Created by Grzegorz Wójcik on 10.03.2014.
6 | // Copyright (c) 2014 Wojczitsu. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import "GWQuestionnaire.h"
11 | @interface ViewController ()
12 | {
13 | GWQuestionnaire *surveyController;
14 | }
15 | @end
16 |
17 | @implementation ViewController
18 |
19 | - (void)viewDidLoad
20 | {
21 | [super viewDidLoad];
22 | [self.view setBackgroundColor:[UIColor lightGrayColor]];
23 | // add survey / questionnaire
24 | [self addSurvey];
25 | }
26 |
27 | -(void)addSurvey
28 | {
29 | NSMutableArray *questions = [NSMutableArray array];
30 |
31 | NSDictionary *a1 = [NSDictionary dictionaryWithObjectsAndKeys:@"YES",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
32 | NSDictionary *a2 = [NSDictionary dictionaryWithObjectsAndKeys:@"NO",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
33 |
34 | NSDictionary *a3 = [NSDictionary dictionaryWithObjectsAndKeys:@"A",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
35 | NSDictionary *a4 = [NSDictionary dictionaryWithObjectsAndKeys:@"B",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
36 | NSDictionary *a5 = [NSDictionary dictionaryWithObjectsAndKeys:@"C",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
37 |
38 | NSDictionary *a6 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
39 | NSDictionary *a7 = [NSDictionary dictionaryWithObjectsAndKeys:@"2",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
40 | NSDictionary *a8 = [NSDictionary dictionaryWithObjectsAndKeys:@"3",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
41 | NSDictionary *a9 = [NSDictionary dictionaryWithObjectsAndKeys:@"4",@"text",[NSNumber numberWithBool:NO],@"marked", nil];
42 |
43 |
44 | // single choice question
45 | GWQuestionnaireItem *item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Single choice question ?"
46 | answers:[NSArray arrayWithObjects:a1,a2, nil]
47 | type:GWQuestionnaireSingleChoice];
48 | [questions addObject:item];
49 |
50 | // multiple choice question
51 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Multiple choice question ?"
52 | answers:[NSArray arrayWithObjects:a3,a4,a5, nil]
53 | type:GWQuestionnaireMultipleChoice];
54 | [questions addObject:item];
55 |
56 | // "Rate" question
57 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Rate it:"
58 | answers:[NSArray arrayWithObjects:a6,a7,a8,a9, nil]
59 | type:GWQuestionnaireRateQuestion];
60 | [questions addObject:item];
61 |
62 | // "open" question
63 | item = [[GWQuestionnaireItem alloc] initWithQuestion:@"Type your answer:"
64 | answers:nil
65 | type:GWQuestionnaireOpenQuestion];
66 | [questions addObject:item];
67 |
68 | surveyController = [[GWQuestionnaire alloc] initWithItems:questions];
69 | surveyController.view.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20);
70 | [self.view addSubview:surveyController.view];
71 |
72 |
73 | // add button
74 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
75 | [btn setTitle:NSLocalizedString(@"Get answers!", nil) forState:UIControlStateNormal];
76 | [btn addTarget:self action:@selector(getAnswersPressed:) forControlEvents:UIControlEventTouchUpInside];
77 | int btnW = 150;
78 | int btnX = (self.view.frame.size.width - btnW)/2;
79 | [btn setFrame:CGRectMake(btnX, self.view.frame.size.height - 40, btnW, 40)];
80 | [self.view addSubview:btn];
81 | }
82 |
83 |
84 | -(void)getAnswersPressed:(id)sender
85 | {
86 | if(![surveyController isCompleted])
87 | {
88 | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Questionnaire not completed." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
89 | [alert show];
90 | return;
91 | }
92 |
93 | // NSLog answers
94 | for(GWQuestionnaireItem *item in surveyController.surveyItems)
95 | {
96 | NSLog(@"-----------------");
97 | NSLog(@"%@",item.question);
98 | NSLog(@"-----------------");
99 | if(item.type == GWQuestionnaireOpenQuestion)
100 | NSLog(@"Answer: %@", item.userAnswer);
101 | else
102 | for(NSDictionary *dict in item.answers)
103 | {
104 | NSLog(@"%d - %@",[[dict objectForKey:@"marked"]boolValue], [dict objectForKey:@"text"]);
105 | }
106 | }
107 | }
108 |
109 |
110 | @end
111 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaireCells/GWQuestionnaireCellSelection.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaireCellSelection.m
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 |
8 | #import "GWQuestionnaireCellSelection.h"
9 |
10 | #define OPTION_H 44
11 |
12 | @interface GWQuestionnaireCellSelection ()
13 | {
14 | float actualY;
15 | NSMutableArray *answers;
16 | GWQuestionnaire *owner;
17 | int row;
18 | GWQuestionnaireItemType typeOfItem;
19 | }
20 | @end
21 | @implementation GWQuestionnaireCellSelection
22 | - (void)awakeFromNib
23 | {
24 | [super awakeFromNib];
25 | [self.container.layer setCornerRadius:8.0];
26 | [self.container.layer setBorderColor:[UIColor lightGrayColor].CGColor];
27 | [self.container.layer setBorderWidth:1.0];
28 | }
29 |
30 | -(void)setOwner:(GWQuestionnaire*)val
31 | {
32 | owner = val;
33 | }
34 | -(void)setContent:(GWQuestionnaireItem*)item row:(int)r
35 | {
36 | row = r;
37 | typeOfItem = item.type;
38 | answers = [NSMutableArray arrayWithArray:item.answers];
39 | [[self.container subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
40 | actualY = 0;
41 | for(int i=0; i < [item.answers count]; i++)
42 | {
43 | NSDictionary *option = [item.answers objectAtIndex:i];
44 | UIView *subview = [self createOptionView:option index:i];
45 | [subview setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |
46 | UIViewAutoresizingFlexibleLeftMargin];
47 | [self.container addSubview:subview];
48 | }
49 | CGRect f = self.container.frame;
50 | f.size.height = actualY;
51 | self.container.frame = f;
52 | }
53 | -(UIView*)createOptionView:(NSDictionary*)dict index:(int)index
54 | {
55 | index += 1;
56 | UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0,actualY,_container.frame.size.width,OPTION_H)];
57 | [v setBackgroundColor:[UIColor clearColor]];
58 | int labelX = 80;
59 | UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(labelX,0,v.frame.size.width-labelX,OPTION_H)];
60 | [lbl setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
61 | [lbl setAdjustsFontSizeToFitWidth:YES];
62 | [lbl setMinimumScaleFactor:8./15.];
63 | [lbl setFont:[UIFont systemFontOfSize:15.0]];
64 | [lbl setBackgroundColor:[UIColor clearColor]];
65 | [lbl setText:[dict objectForKey:@"text"]];
66 | [v addSubview:lbl];
67 | [v setTag:index];
68 |
69 | UIImageView *img = [[UIImageView alloc] initWithFrame:CGRectMake(10, 2, 41, 41)];
70 | [img setTag:index];
71 | if(![[dict objectForKey:@"marked"] boolValue])
72 | [img setImage:[UIImage imageNamed:@"unchecked"]];
73 | else
74 | [img setImage:[UIImage imageNamed:@"checked"]];
75 | [v addSubview:img];
76 |
77 | UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
78 | btn.tag = index;
79 | [btn addTarget:self action:@selector(checboxPressed:) forControlEvents:UIControlEventTouchUpInside];
80 | btn.frame = CGRectMake(0,0,v.frame.size.width, v.frame.size.height);
81 | [btn setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |
82 | UIViewAutoresizingFlexibleLeftMargin];
83 | [v addSubview:btn];
84 |
85 | actualY += OPTION_H;
86 | return v;
87 | }
88 |
89 | -(void)checboxPressed:(id)sender
90 | {
91 | UIView *cont = [self.container viewWithTag:[sender tag]];
92 | UIImageView *image = nil;
93 | for(UIView *subview in cont.subviews)
94 | {
95 | if([subview isKindOfClass:[UIImageView class]])
96 | {
97 | image = (UIImageView*)subview;
98 | break;
99 | }
100 | }
101 |
102 | if([[[answers objectAtIndex:[sender tag]-1] objectForKey:@"marked"] boolValue])
103 | {
104 | [image setImage:[UIImage imageNamed:@"unchecked"]];
105 | NSDictionary *old = [answers objectAtIndex:[sender tag]-1];
106 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:NO],@"marked", nil];
107 | [answers replaceObjectAtIndex:[sender tag]-1 withObject:newD];
108 | }
109 | else
110 | {
111 | if(typeOfItem == GWQuestionnaireSingleChoice)
112 | {
113 | for(UIView *containerSubview in self.container.subviews)
114 | {
115 | for(UIView *subview in containerSubview.subviews)
116 | {
117 | if([subview isKindOfClass:[UIImageView class]])
118 | {
119 | UIImageView *btn = (UIImageView*)subview;
120 | [btn setImage:[UIImage imageNamed:@"unchecked"]];
121 | NSDictionary *old = [answers objectAtIndex:[btn tag]-1];
122 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:NO],@"marked", nil];
123 | [answers replaceObjectAtIndex:[btn tag]-1 withObject:newD];
124 | }
125 | }
126 | }
127 | }
128 |
129 | [image setImage:[UIImage imageNamed:@"checked"]];
130 | NSDictionary *old = [answers objectAtIndex:[sender tag]-1];
131 | NSDictionary *newD = [NSDictionary dictionaryWithObjectsAndKeys:[old objectForKey:@"text"],@"text",[NSNumber numberWithBool:YES],@"marked", nil];
132 | [answers replaceObjectAtIndex:[sender tag]-1 withObject:newD];
133 | }
134 | [owner performSelector:@selector(surveyCellSelectionChanged:atIndex:) withObject:answers withObject:[NSNumber numberWithInt:row]];
135 | }
136 | @end
137 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo/GWQuestionnaire/GWQuestionnaire.m:
--------------------------------------------------------------------------------
1 | //
2 | // GWQuestionnaire.m
3 | //
4 | // Created by Grzegorz Wójcik on 07.03.2014.
5 | //
6 | //
7 |
8 | #import "GWQuestionnaire.h"
9 | #import "GWQuestionnaireCellSelection.h"
10 | #import "GWQuestionnaireCellRate.h"
11 | #import "GWQuestionnaireCellTextField.h"
12 |
13 | #define HEADER_MARGIN 10
14 | #define HEADER_W 0.9
15 | #define RATE_CELL_H 125 // height of GWQuestionnaireCellRate
16 | #define OPEN_QUESTION_CELL_H 44 // height of GWQuestionnaireCellTextField
17 |
18 | @interface GWQuestionnaire ()
19 | {
20 | UIFont *headerFont;
21 | }
22 | @end
23 |
24 | @implementation GWQuestionnaire
25 |
26 | - (id)initWithItems:(NSMutableArray*)items
27 | {
28 | self = [super initWithStyle:UITableViewStylePlain];
29 | if (self) {
30 | self.surveyItems = items;
31 | }
32 | return self;
33 | }
34 |
35 | - (void)viewDidLoad
36 | {
37 | [super viewDidLoad];
38 | [self.tableView setBackgroundColor:[UIColor clearColor]];
39 | headerFont = [UIFont systemFontOfSize:15.0];
40 | [self.tableView setBackgroundColor:[UIColor clearColor]];
41 | [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
42 | }
43 |
44 | -(CGFloat)heightForTitle:(NSString*)str
45 | {
46 | CGSize size = [str sizeWithFont:headerFont constrainedToSize:CGSizeMake(HEADER_W * self.view.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];
47 | return size.height;
48 | }
49 | #pragma mark - UITableView delegate & datasource
50 | -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
51 | if(!_surveyItems)
52 | return 0;
53 | return _surveyItems.count;
54 | }
55 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
56 | {
57 | return 1;
58 | }
59 | - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
60 | {
61 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:section];
62 | return [self heightForTitle:item.question] + HEADER_MARGIN;
63 | }
64 | - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
65 | {
66 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:section];
67 | UIView *sectionHeaderView = [[UIView alloc] initWithFrame:
68 | CGRectMake(0, 0, tableView.frame.size.width, [self heightForTitle:item.question] + HEADER_MARGIN)];
69 | sectionHeaderView.backgroundColor = [UIColor lightGrayColor];
70 |
71 | int headerW = self.view.frame.size.width * HEADER_W;
72 | UILabel *headerLabel = [[UILabel alloc] initWithFrame:
73 | CGRectMake((sectionHeaderView.frame.size.width - headerW)/2, HEADER_MARGIN/2, headerW, sectionHeaderView.frame.size.height - HEADER_MARGIN)];
74 | headerLabel.backgroundColor = [UIColor clearColor];
75 | [headerLabel setTextColor:[UIColor blackColor]];
76 | [headerLabel setFont:headerFont];
77 | [headerLabel setNumberOfLines:0];
78 | headerLabel.text = item.question;
79 | [sectionHeaderView addSubview:headerLabel];
80 |
81 | return sectionHeaderView;
82 | }
83 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
84 | {
85 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:indexPath.section];
86 |
87 | // GWQuestionnaireSingleChoice or GWQuestionnaireMultipleChoice
88 | if(item.type == GWQuestionnaireSingleChoice || item.type == GWQuestionnaireMultipleChoice)
89 | {
90 | int optionsH = [item.answers count] * 44;
91 | return optionsH;
92 | }
93 | // GWQuestionnaireRateQuestion
94 | if(item.type == GWQuestionnaireRateQuestion)
95 | {
96 | return RATE_CELL_H;
97 | }
98 | // GWQuestionnaireOpenQuestion
99 | if(item.type == GWQuestionnaireOpenQuestion)
100 | {
101 | return OPEN_QUESTION_CELL_H;
102 | }
103 | return 44.0;
104 | }
105 |
106 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
107 | {
108 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:indexPath.section];
109 |
110 | // GWQuestionnaireSingleChoice or GWQuestionnaireMultipleChoice
111 | if(item.type == GWQuestionnaireSingleChoice || item.type == GWQuestionnaireMultipleChoice)
112 | {
113 | static NSString *cellIdentifier = @"GWQuestionnaireCellSelection";
114 | GWQuestionnaireCellSelection *cell = (GWQuestionnaireCellSelection *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
115 | if (cell == nil)
116 | {
117 | NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GWQuestionnaireCellSelection" owner:self options:nil];
118 | cell = [nib objectAtIndex:0];
119 | [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
120 | cell.backgroundColor = [UIColor clearColor];
121 | [cell setOwner:self];
122 | }
123 | [cell setContent:item row:indexPath.section];
124 | return cell;
125 | }
126 |
127 | // GWQuestionnaireRateQuestion
128 | if(item.type == GWQuestionnaireRateQuestion)
129 | {
130 | static NSString *cellIdentifier = @"GWQuestionnaireCellRate";
131 | GWQuestionnaireCellRate *cell = (GWQuestionnaireCellRate *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
132 | if (cell == nil)
133 | {
134 | NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GWQuestionnaireCellRate" owner:self options:nil];
135 | cell = [nib objectAtIndex:0];
136 | [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
137 | cell.backgroundColor = [UIColor clearColor];
138 | [cell setOwner:self];
139 | }
140 | [cell setContent:item row:indexPath.section parentWidth:self.view.frame.size.width];
141 | return cell;
142 | }
143 |
144 | // GWQuestionnaireOpenQuestion
145 | if(item.type == GWQuestionnaireOpenQuestion)
146 | {
147 | static NSString *cellIdentifier = @"GWQuestionnaireCellTextField";
148 | GWQuestionnaireCellTextField *cell = (GWQuestionnaireCellTextField *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
149 | if (cell == nil)
150 | {
151 | NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"GWQuestionnaireCellTextField" owner:self options:nil];
152 | cell = [nib objectAtIndex:0];
153 | [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
154 | cell.backgroundColor = [UIColor clearColor];
155 | [cell setOwner:self];
156 | }
157 | [cell setContent:item row:indexPath.section];
158 | return cell;
159 | }
160 |
161 | return nil;
162 | }
163 |
164 | #pragma mark Cell editing
165 | // called by GWQuestionnaireCellRate, GWQuestionnaireSingleChoice & GWQuestionnaireMultipleChoice
166 | -(void)surveyCellSelectionChanged:(NSArray*)arr atIndex:(NSNumber*)index
167 | {
168 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:[index intValue]];
169 | item.answers = arr;
170 | [self.surveyItems replaceObjectAtIndex:[index intValue] withObject:item];
171 | }
172 |
173 | // called by GWQuestionnaireCellTextField
174 | -(void)surveyCellUserAnswerChanged:(NSString*)answer atIndex:(NSNumber*)index
175 | {
176 | GWQuestionnaireItem *item = [self.surveyItems objectAtIndex:[index intValue]];
177 | item.userAnswer = answer;
178 | [self.surveyItems replaceObjectAtIndex:[index intValue] withObject:item];
179 | }
180 |
181 | #pragma mark Getting results
182 | // returns YES if every question has been answered
183 | -(BOOL)isCompleted
184 | {
185 | for(GWQuestionnaireItem *item in _surveyItems)
186 | {
187 | if(item.type == GWQuestionnaireMultipleChoice ||
188 | item.type == GWQuestionnaireSingleChoice ||
189 | item.type == GWQuestionnaireRateQuestion)
190 | {
191 | BOOL answered = NO;
192 | for(NSDictionary *answer in item.answers)
193 | {
194 | if([[answer objectForKey:@"marked"] boolValue])
195 | {
196 | answered = YES;
197 | break;
198 | }
199 | }
200 | if(!answered)
201 | return NO;
202 | }
203 | else
204 | {
205 | if(!item.userAnswer || [item.userAnswer length] == 0)
206 | return NO;
207 | }
208 | }
209 | return YES;
210 | }
211 | @end
212 |
--------------------------------------------------------------------------------
/GWQuestionnaireDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | D48B3B0018CDFA7800903A1C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3AFF18CDFA7800903A1C /* Foundation.framework */; };
11 | D48B3B0218CDFA7800903A1C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3B0118CDFA7800903A1C /* CoreGraphics.framework */; };
12 | D48B3B0418CDFA7800903A1C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3B0318CDFA7800903A1C /* UIKit.framework */; };
13 | D48B3B0A18CDFA7800903A1C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B0818CDFA7800903A1C /* InfoPlist.strings */; };
14 | D48B3B0C18CDFA7800903A1C /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B0B18CDFA7800903A1C /* main.m */; };
15 | D48B3B1018CDFA7800903A1C /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B0F18CDFA7800903A1C /* AppDelegate.m */; };
16 | D48B3B1318CDFA7800903A1C /* Main_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B1118CDFA7800903A1C /* Main_iPhone.storyboard */; };
17 | D48B3B1618CDFA7800903A1C /* Main_iPad.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B1418CDFA7800903A1C /* Main_iPad.storyboard */; };
18 | D48B3B1918CDFA7800903A1C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B1818CDFA7800903A1C /* ViewController.m */; };
19 | D48B3B1B18CDFA7800903A1C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B1A18CDFA7800903A1C /* Images.xcassets */; };
20 | D48B3B2218CDFA7800903A1C /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3B2118CDFA7800903A1C /* XCTest.framework */; };
21 | D48B3B2318CDFA7800903A1C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3AFF18CDFA7800903A1C /* Foundation.framework */; };
22 | D48B3B2418CDFA7800903A1C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D48B3B0318CDFA7800903A1C /* UIKit.framework */; };
23 | D48B3B2C18CDFA7800903A1C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B2A18CDFA7800903A1C /* InfoPlist.strings */; };
24 | D48B3B2E18CDFA7800903A1C /* GWQuestionnaireDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B2D18CDFA7800903A1C /* GWQuestionnaireDemoTests.m */; };
25 | D48B3B5F18CDFE7200903A1C /* GWQuestionnaire.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B5118CDFE7200903A1C /* GWQuestionnaire.m */; };
26 | D48B3B6018CDFE7200903A1C /* GWQuestionnaireCellRate.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B5418CDFE7200903A1C /* GWQuestionnaireCellRate.m */; };
27 | D48B3B6118CDFE7200903A1C /* GWQuestionnaireCellRate.xib in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B5518CDFE7200903A1C /* GWQuestionnaireCellRate.xib */; };
28 | D48B3B6218CDFE7200903A1C /* GWQuestionnaireCellSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B5718CDFE7200903A1C /* GWQuestionnaireCellSelection.m */; };
29 | D48B3B6318CDFE7200903A1C /* GWQuestionnaireCellSelection.xib in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B5818CDFE7200903A1C /* GWQuestionnaireCellSelection.xib */; };
30 | D48B3B6418CDFE7200903A1C /* GWQuestionnaireCellTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B5A18CDFE7200903A1C /* GWQuestionnaireCellTextField.m */; };
31 | D48B3B6518CDFE7200903A1C /* GWQuestionnaireCellTextField.xib in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B5B18CDFE7200903A1C /* GWQuestionnaireCellTextField.xib */; };
32 | D48B3B6618CDFE7200903A1C /* GWQuestionnaireItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D48B3B5E18CDFE7200903A1C /* GWQuestionnaireItem.m */; };
33 | D48B3B6918CE027800903A1C /* checked.png in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B6718CE027800903A1C /* checked.png */; };
34 | D48B3B6A18CE027800903A1C /* unchecked.png in Resources */ = {isa = PBXBuildFile; fileRef = D48B3B6818CE027800903A1C /* unchecked.png */; };
35 | /* End PBXBuildFile section */
36 |
37 | /* Begin PBXContainerItemProxy section */
38 | D48B3B2518CDFA7800903A1C /* PBXContainerItemProxy */ = {
39 | isa = PBXContainerItemProxy;
40 | containerPortal = D48B3AF418CDFA7800903A1C /* Project object */;
41 | proxyType = 1;
42 | remoteGlobalIDString = D48B3AFB18CDFA7800903A1C;
43 | remoteInfo = GWQuestionnaireDemo;
44 | };
45 | /* End PBXContainerItemProxy section */
46 |
47 | /* Begin PBXFileReference section */
48 | D48B3AFC18CDFA7800903A1C /* GWQuestionnaireDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GWQuestionnaireDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
49 | D48B3AFF18CDFA7800903A1C /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
50 | D48B3B0118CDFA7800903A1C /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
51 | D48B3B0318CDFA7800903A1C /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
52 | D48B3B0718CDFA7800903A1C /* GWQuestionnaireDemo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GWQuestionnaireDemo-Info.plist"; sourceTree = ""; };
53 | D48B3B0918CDFA7800903A1C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
54 | D48B3B0B18CDFA7800903A1C /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
55 | D48B3B0D18CDFA7800903A1C /* GWQuestionnaireDemo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "GWQuestionnaireDemo-Prefix.pch"; sourceTree = ""; };
56 | D48B3B0E18CDFA7800903A1C /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
57 | D48B3B0F18CDFA7800903A1C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
58 | D48B3B1218CDFA7800903A1C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPhone.storyboard; sourceTree = ""; };
59 | D48B3B1518CDFA7800903A1C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main_iPad.storyboard; sourceTree = ""; };
60 | D48B3B1718CDFA7800903A1C /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
61 | D48B3B1818CDFA7800903A1C /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
62 | D48B3B1A18CDFA7800903A1C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
63 | D48B3B2018CDFA7800903A1C /* GWQuestionnaireDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GWQuestionnaireDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
64 | D48B3B2118CDFA7800903A1C /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
65 | D48B3B2918CDFA7800903A1C /* GWQuestionnaireDemoTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GWQuestionnaireDemoTests-Info.plist"; sourceTree = ""; };
66 | D48B3B2B18CDFA7800903A1C /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
67 | D48B3B2D18CDFA7800903A1C /* GWQuestionnaireDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaireDemoTests.m; sourceTree = ""; };
68 | D48B3B5018CDFE7200903A1C /* GWQuestionnaire.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GWQuestionnaire.h; sourceTree = ""; };
69 | D48B3B5118CDFE7200903A1C /* GWQuestionnaire.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaire.m; sourceTree = ""; };
70 | D48B3B5318CDFE7200903A1C /* GWQuestionnaireCellRate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GWQuestionnaireCellRate.h; sourceTree = ""; };
71 | D48B3B5418CDFE7200903A1C /* GWQuestionnaireCellRate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaireCellRate.m; sourceTree = ""; };
72 | D48B3B5518CDFE7200903A1C /* GWQuestionnaireCellRate.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GWQuestionnaireCellRate.xib; sourceTree = ""; };
73 | D48B3B5618CDFE7200903A1C /* GWQuestionnaireCellSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GWQuestionnaireCellSelection.h; sourceTree = ""; };
74 | D48B3B5718CDFE7200903A1C /* GWQuestionnaireCellSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaireCellSelection.m; sourceTree = ""; };
75 | D48B3B5818CDFE7200903A1C /* GWQuestionnaireCellSelection.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GWQuestionnaireCellSelection.xib; sourceTree = ""; };
76 | D48B3B5918CDFE7200903A1C /* GWQuestionnaireCellTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GWQuestionnaireCellTextField.h; sourceTree = ""; };
77 | D48B3B5A18CDFE7200903A1C /* GWQuestionnaireCellTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaireCellTextField.m; sourceTree = ""; };
78 | D48B3B5B18CDFE7200903A1C /* GWQuestionnaireCellTextField.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GWQuestionnaireCellTextField.xib; sourceTree = ""; };
79 | D48B3B5D18CDFE7200903A1C /* GWQuestionnaireItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GWQuestionnaireItem.h; sourceTree = ""; };
80 | D48B3B5E18CDFE7200903A1C /* GWQuestionnaireItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GWQuestionnaireItem.m; sourceTree = ""; };
81 | D48B3B6718CE027800903A1C /* checked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = checked.png; sourceTree = ""; };
82 | D48B3B6818CE027800903A1C /* unchecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unchecked.png; sourceTree = ""; };
83 | /* End PBXFileReference section */
84 |
85 | /* Begin PBXFrameworksBuildPhase section */
86 | D48B3AF918CDFA7800903A1C /* Frameworks */ = {
87 | isa = PBXFrameworksBuildPhase;
88 | buildActionMask = 2147483647;
89 | files = (
90 | D48B3B0218CDFA7800903A1C /* CoreGraphics.framework in Frameworks */,
91 | D48B3B0418CDFA7800903A1C /* UIKit.framework in Frameworks */,
92 | D48B3B0018CDFA7800903A1C /* Foundation.framework in Frameworks */,
93 | );
94 | runOnlyForDeploymentPostprocessing = 0;
95 | };
96 | D48B3B1D18CDFA7800903A1C /* Frameworks */ = {
97 | isa = PBXFrameworksBuildPhase;
98 | buildActionMask = 2147483647;
99 | files = (
100 | D48B3B2218CDFA7800903A1C /* XCTest.framework in Frameworks */,
101 | D48B3B2418CDFA7800903A1C /* UIKit.framework in Frameworks */,
102 | D48B3B2318CDFA7800903A1C /* Foundation.framework in Frameworks */,
103 | );
104 | runOnlyForDeploymentPostprocessing = 0;
105 | };
106 | /* End PBXFrameworksBuildPhase section */
107 |
108 | /* Begin PBXGroup section */
109 | D48B3AF318CDFA7800903A1C = {
110 | isa = PBXGroup;
111 | children = (
112 | D48B3B0518CDFA7800903A1C /* GWQuestionnaireDemo */,
113 | D48B3B2718CDFA7800903A1C /* GWQuestionnaireDemoTests */,
114 | D48B3AFE18CDFA7800903A1C /* Frameworks */,
115 | D48B3AFD18CDFA7800903A1C /* Products */,
116 | );
117 | sourceTree = "";
118 | };
119 | D48B3AFD18CDFA7800903A1C /* Products */ = {
120 | isa = PBXGroup;
121 | children = (
122 | D48B3AFC18CDFA7800903A1C /* GWQuestionnaireDemo.app */,
123 | D48B3B2018CDFA7800903A1C /* GWQuestionnaireDemoTests.xctest */,
124 | );
125 | name = Products;
126 | sourceTree = "";
127 | };
128 | D48B3AFE18CDFA7800903A1C /* Frameworks */ = {
129 | isa = PBXGroup;
130 | children = (
131 | D48B3AFF18CDFA7800903A1C /* Foundation.framework */,
132 | D48B3B0118CDFA7800903A1C /* CoreGraphics.framework */,
133 | D48B3B0318CDFA7800903A1C /* UIKit.framework */,
134 | D48B3B2118CDFA7800903A1C /* XCTest.framework */,
135 | );
136 | name = Frameworks;
137 | sourceTree = "";
138 | };
139 | D48B3B0518CDFA7800903A1C /* GWQuestionnaireDemo */ = {
140 | isa = PBXGroup;
141 | children = (
142 | D48B3B4F18CDFE7200903A1C /* GWQuestionnaire */,
143 | D48B3B0E18CDFA7800903A1C /* AppDelegate.h */,
144 | D48B3B0F18CDFA7800903A1C /* AppDelegate.m */,
145 | D48B3B1118CDFA7800903A1C /* Main_iPhone.storyboard */,
146 | D48B3B1418CDFA7800903A1C /* Main_iPad.storyboard */,
147 | D48B3B1718CDFA7800903A1C /* ViewController.h */,
148 | D48B3B1818CDFA7800903A1C /* ViewController.m */,
149 | D48B3B1A18CDFA7800903A1C /* Images.xcassets */,
150 | D48B3B0618CDFA7800903A1C /* Supporting Files */,
151 | );
152 | path = GWQuestionnaireDemo;
153 | sourceTree = "";
154 | };
155 | D48B3B0618CDFA7800903A1C /* Supporting Files */ = {
156 | isa = PBXGroup;
157 | children = (
158 | D48B3B0718CDFA7800903A1C /* GWQuestionnaireDemo-Info.plist */,
159 | D48B3B0818CDFA7800903A1C /* InfoPlist.strings */,
160 | D48B3B0B18CDFA7800903A1C /* main.m */,
161 | D48B3B0D18CDFA7800903A1C /* GWQuestionnaireDemo-Prefix.pch */,
162 | );
163 | name = "Supporting Files";
164 | sourceTree = "";
165 | };
166 | D48B3B2718CDFA7800903A1C /* GWQuestionnaireDemoTests */ = {
167 | isa = PBXGroup;
168 | children = (
169 | D48B3B2D18CDFA7800903A1C /* GWQuestionnaireDemoTests.m */,
170 | D48B3B2818CDFA7800903A1C /* Supporting Files */,
171 | );
172 | path = GWQuestionnaireDemoTests;
173 | sourceTree = "";
174 | };
175 | D48B3B2818CDFA7800903A1C /* Supporting Files */ = {
176 | isa = PBXGroup;
177 | children = (
178 | D48B3B2918CDFA7800903A1C /* GWQuestionnaireDemoTests-Info.plist */,
179 | D48B3B2A18CDFA7800903A1C /* InfoPlist.strings */,
180 | );
181 | name = "Supporting Files";
182 | sourceTree = "";
183 | };
184 | D48B3B4F18CDFE7200903A1C /* GWQuestionnaire */ = {
185 | isa = PBXGroup;
186 | children = (
187 | D48B3B6718CE027800903A1C /* checked.png */,
188 | D48B3B6818CE027800903A1C /* unchecked.png */,
189 | D48B3B5018CDFE7200903A1C /* GWQuestionnaire.h */,
190 | D48B3B5118CDFE7200903A1C /* GWQuestionnaire.m */,
191 | D48B3B5218CDFE7200903A1C /* GWQuestionnaireCells */,
192 | D48B3B5C18CDFE7200903A1C /* GWQuestionnaireItem */,
193 | );
194 | path = GWQuestionnaire;
195 | sourceTree = "";
196 | };
197 | D48B3B5218CDFE7200903A1C /* GWQuestionnaireCells */ = {
198 | isa = PBXGroup;
199 | children = (
200 | D48B3B5318CDFE7200903A1C /* GWQuestionnaireCellRate.h */,
201 | D48B3B5418CDFE7200903A1C /* GWQuestionnaireCellRate.m */,
202 | D48B3B5518CDFE7200903A1C /* GWQuestionnaireCellRate.xib */,
203 | D48B3B5618CDFE7200903A1C /* GWQuestionnaireCellSelection.h */,
204 | D48B3B5718CDFE7200903A1C /* GWQuestionnaireCellSelection.m */,
205 | D48B3B5818CDFE7200903A1C /* GWQuestionnaireCellSelection.xib */,
206 | D48B3B5918CDFE7200903A1C /* GWQuestionnaireCellTextField.h */,
207 | D48B3B5A18CDFE7200903A1C /* GWQuestionnaireCellTextField.m */,
208 | D48B3B5B18CDFE7200903A1C /* GWQuestionnaireCellTextField.xib */,
209 | );
210 | path = GWQuestionnaireCells;
211 | sourceTree = "";
212 | };
213 | D48B3B5C18CDFE7200903A1C /* GWQuestionnaireItem */ = {
214 | isa = PBXGroup;
215 | children = (
216 | D48B3B5D18CDFE7200903A1C /* GWQuestionnaireItem.h */,
217 | D48B3B5E18CDFE7200903A1C /* GWQuestionnaireItem.m */,
218 | );
219 | path = GWQuestionnaireItem;
220 | sourceTree = "";
221 | };
222 | /* End PBXGroup section */
223 |
224 | /* Begin PBXNativeTarget section */
225 | D48B3AFB18CDFA7800903A1C /* GWQuestionnaireDemo */ = {
226 | isa = PBXNativeTarget;
227 | buildConfigurationList = D48B3B3118CDFA7800903A1C /* Build configuration list for PBXNativeTarget "GWQuestionnaireDemo" */;
228 | buildPhases = (
229 | D48B3AF818CDFA7800903A1C /* Sources */,
230 | D48B3AF918CDFA7800903A1C /* Frameworks */,
231 | D48B3AFA18CDFA7800903A1C /* Resources */,
232 | );
233 | buildRules = (
234 | );
235 | dependencies = (
236 | );
237 | name = GWQuestionnaireDemo;
238 | productName = GWQuestionnaireDemo;
239 | productReference = D48B3AFC18CDFA7800903A1C /* GWQuestionnaireDemo.app */;
240 | productType = "com.apple.product-type.application";
241 | };
242 | D48B3B1F18CDFA7800903A1C /* GWQuestionnaireDemoTests */ = {
243 | isa = PBXNativeTarget;
244 | buildConfigurationList = D48B3B3418CDFA7800903A1C /* Build configuration list for PBXNativeTarget "GWQuestionnaireDemoTests" */;
245 | buildPhases = (
246 | D48B3B1C18CDFA7800903A1C /* Sources */,
247 | D48B3B1D18CDFA7800903A1C /* Frameworks */,
248 | D48B3B1E18CDFA7800903A1C /* Resources */,
249 | );
250 | buildRules = (
251 | );
252 | dependencies = (
253 | D48B3B2618CDFA7800903A1C /* PBXTargetDependency */,
254 | );
255 | name = GWQuestionnaireDemoTests;
256 | productName = GWQuestionnaireDemoTests;
257 | productReference = D48B3B2018CDFA7800903A1C /* GWQuestionnaireDemoTests.xctest */;
258 | productType = "com.apple.product-type.bundle.unit-test";
259 | };
260 | /* End PBXNativeTarget section */
261 |
262 | /* Begin PBXProject section */
263 | D48B3AF418CDFA7800903A1C /* Project object */ = {
264 | isa = PBXProject;
265 | attributes = {
266 | LastUpgradeCheck = 0500;
267 | ORGANIZATIONNAME = Wojczitsu;
268 | TargetAttributes = {
269 | D48B3B1F18CDFA7800903A1C = {
270 | TestTargetID = D48B3AFB18CDFA7800903A1C;
271 | };
272 | };
273 | };
274 | buildConfigurationList = D48B3AF718CDFA7800903A1C /* Build configuration list for PBXProject "GWQuestionnaireDemo" */;
275 | compatibilityVersion = "Xcode 3.2";
276 | developmentRegion = English;
277 | hasScannedForEncodings = 0;
278 | knownRegions = (
279 | en,
280 | Base,
281 | );
282 | mainGroup = D48B3AF318CDFA7800903A1C;
283 | productRefGroup = D48B3AFD18CDFA7800903A1C /* Products */;
284 | projectDirPath = "";
285 | projectRoot = "";
286 | targets = (
287 | D48B3AFB18CDFA7800903A1C /* GWQuestionnaireDemo */,
288 | D48B3B1F18CDFA7800903A1C /* GWQuestionnaireDemoTests */,
289 | );
290 | };
291 | /* End PBXProject section */
292 |
293 | /* Begin PBXResourcesBuildPhase section */
294 | D48B3AFA18CDFA7800903A1C /* Resources */ = {
295 | isa = PBXResourcesBuildPhase;
296 | buildActionMask = 2147483647;
297 | files = (
298 | D48B3B6318CDFE7200903A1C /* GWQuestionnaireCellSelection.xib in Resources */,
299 | D48B3B1618CDFA7800903A1C /* Main_iPad.storyboard in Resources */,
300 | D48B3B6518CDFE7200903A1C /* GWQuestionnaireCellTextField.xib in Resources */,
301 | D48B3B1B18CDFA7800903A1C /* Images.xcassets in Resources */,
302 | D48B3B1318CDFA7800903A1C /* Main_iPhone.storyboard in Resources */,
303 | D48B3B6918CE027800903A1C /* checked.png in Resources */,
304 | D48B3B0A18CDFA7800903A1C /* InfoPlist.strings in Resources */,
305 | D48B3B6A18CE027800903A1C /* unchecked.png in Resources */,
306 | D48B3B6118CDFE7200903A1C /* GWQuestionnaireCellRate.xib in Resources */,
307 | );
308 | runOnlyForDeploymentPostprocessing = 0;
309 | };
310 | D48B3B1E18CDFA7800903A1C /* Resources */ = {
311 | isa = PBXResourcesBuildPhase;
312 | buildActionMask = 2147483647;
313 | files = (
314 | D48B3B2C18CDFA7800903A1C /* InfoPlist.strings in Resources */,
315 | );
316 | runOnlyForDeploymentPostprocessing = 0;
317 | };
318 | /* End PBXResourcesBuildPhase section */
319 |
320 | /* Begin PBXSourcesBuildPhase section */
321 | D48B3AF818CDFA7800903A1C /* Sources */ = {
322 | isa = PBXSourcesBuildPhase;
323 | buildActionMask = 2147483647;
324 | files = (
325 | D48B3B1918CDFA7800903A1C /* ViewController.m in Sources */,
326 | D48B3B5F18CDFE7200903A1C /* GWQuestionnaire.m in Sources */,
327 | D48B3B6418CDFE7200903A1C /* GWQuestionnaireCellTextField.m in Sources */,
328 | D48B3B6218CDFE7200903A1C /* GWQuestionnaireCellSelection.m in Sources */,
329 | D48B3B6618CDFE7200903A1C /* GWQuestionnaireItem.m in Sources */,
330 | D48B3B1018CDFA7800903A1C /* AppDelegate.m in Sources */,
331 | D48B3B6018CDFE7200903A1C /* GWQuestionnaireCellRate.m in Sources */,
332 | D48B3B0C18CDFA7800903A1C /* main.m in Sources */,
333 | );
334 | runOnlyForDeploymentPostprocessing = 0;
335 | };
336 | D48B3B1C18CDFA7800903A1C /* Sources */ = {
337 | isa = PBXSourcesBuildPhase;
338 | buildActionMask = 2147483647;
339 | files = (
340 | D48B3B2E18CDFA7800903A1C /* GWQuestionnaireDemoTests.m in Sources */,
341 | );
342 | runOnlyForDeploymentPostprocessing = 0;
343 | };
344 | /* End PBXSourcesBuildPhase section */
345 |
346 | /* Begin PBXTargetDependency section */
347 | D48B3B2618CDFA7800903A1C /* PBXTargetDependency */ = {
348 | isa = PBXTargetDependency;
349 | target = D48B3AFB18CDFA7800903A1C /* GWQuestionnaireDemo */;
350 | targetProxy = D48B3B2518CDFA7800903A1C /* PBXContainerItemProxy */;
351 | };
352 | /* End PBXTargetDependency section */
353 |
354 | /* Begin PBXVariantGroup section */
355 | D48B3B0818CDFA7800903A1C /* InfoPlist.strings */ = {
356 | isa = PBXVariantGroup;
357 | children = (
358 | D48B3B0918CDFA7800903A1C /* en */,
359 | );
360 | name = InfoPlist.strings;
361 | sourceTree = "";
362 | };
363 | D48B3B1118CDFA7800903A1C /* Main_iPhone.storyboard */ = {
364 | isa = PBXVariantGroup;
365 | children = (
366 | D48B3B1218CDFA7800903A1C /* Base */,
367 | );
368 | name = Main_iPhone.storyboard;
369 | sourceTree = "";
370 | };
371 | D48B3B1418CDFA7800903A1C /* Main_iPad.storyboard */ = {
372 | isa = PBXVariantGroup;
373 | children = (
374 | D48B3B1518CDFA7800903A1C /* Base */,
375 | );
376 | name = Main_iPad.storyboard;
377 | sourceTree = "";
378 | };
379 | D48B3B2A18CDFA7800903A1C /* InfoPlist.strings */ = {
380 | isa = PBXVariantGroup;
381 | children = (
382 | D48B3B2B18CDFA7800903A1C /* en */,
383 | );
384 | name = InfoPlist.strings;
385 | sourceTree = "";
386 | };
387 | /* End PBXVariantGroup section */
388 |
389 | /* Begin XCBuildConfiguration section */
390 | D48B3B2F18CDFA7800903A1C /* Debug */ = {
391 | isa = XCBuildConfiguration;
392 | buildSettings = {
393 | ALWAYS_SEARCH_USER_PATHS = NO;
394 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
395 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
396 | CLANG_CXX_LIBRARY = "libc++";
397 | CLANG_ENABLE_MODULES = YES;
398 | CLANG_ENABLE_OBJC_ARC = YES;
399 | CLANG_WARN_BOOL_CONVERSION = YES;
400 | CLANG_WARN_CONSTANT_CONVERSION = YES;
401 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
402 | CLANG_WARN_EMPTY_BODY = YES;
403 | CLANG_WARN_ENUM_CONVERSION = YES;
404 | CLANG_WARN_INT_CONVERSION = YES;
405 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
406 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
407 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
408 | COPY_PHASE_STRIP = NO;
409 | GCC_C_LANGUAGE_STANDARD = gnu99;
410 | GCC_DYNAMIC_NO_PIC = NO;
411 | GCC_OPTIMIZATION_LEVEL = 0;
412 | GCC_PREPROCESSOR_DEFINITIONS = (
413 | "DEBUG=1",
414 | "$(inherited)",
415 | );
416 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
417 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
418 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
419 | GCC_WARN_UNDECLARED_SELECTOR = YES;
420 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
421 | GCC_WARN_UNUSED_FUNCTION = YES;
422 | GCC_WARN_UNUSED_VARIABLE = YES;
423 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
424 | ONLY_ACTIVE_ARCH = YES;
425 | SDKROOT = iphoneos;
426 | TARGETED_DEVICE_FAMILY = "1,2";
427 | };
428 | name = Debug;
429 | };
430 | D48B3B3018CDFA7800903A1C /* Release */ = {
431 | isa = XCBuildConfiguration;
432 | buildSettings = {
433 | ALWAYS_SEARCH_USER_PATHS = NO;
434 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
435 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
436 | CLANG_CXX_LIBRARY = "libc++";
437 | CLANG_ENABLE_MODULES = YES;
438 | CLANG_ENABLE_OBJC_ARC = YES;
439 | CLANG_WARN_BOOL_CONVERSION = YES;
440 | CLANG_WARN_CONSTANT_CONVERSION = YES;
441 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
442 | CLANG_WARN_EMPTY_BODY = YES;
443 | CLANG_WARN_ENUM_CONVERSION = YES;
444 | CLANG_WARN_INT_CONVERSION = YES;
445 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
446 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
447 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
448 | COPY_PHASE_STRIP = YES;
449 | ENABLE_NS_ASSERTIONS = NO;
450 | GCC_C_LANGUAGE_STANDARD = gnu99;
451 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
452 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
453 | GCC_WARN_UNDECLARED_SELECTOR = YES;
454 | GCC_WARN_UNINITIALIZED_AUTOS = YES;
455 | GCC_WARN_UNUSED_FUNCTION = YES;
456 | GCC_WARN_UNUSED_VARIABLE = YES;
457 | IPHONEOS_DEPLOYMENT_TARGET = 7.0;
458 | SDKROOT = iphoneos;
459 | TARGETED_DEVICE_FAMILY = "1,2";
460 | VALIDATE_PRODUCT = YES;
461 | };
462 | name = Release;
463 | };
464 | D48B3B3218CDFA7800903A1C /* Debug */ = {
465 | isa = XCBuildConfiguration;
466 | buildSettings = {
467 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
468 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
469 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
470 | GCC_PREFIX_HEADER = "GWQuestionnaireDemo/GWQuestionnaireDemo-Prefix.pch";
471 | INFOPLIST_FILE = "GWQuestionnaireDemo/GWQuestionnaireDemo-Info.plist";
472 | PRODUCT_NAME = "$(TARGET_NAME)";
473 | WRAPPER_EXTENSION = app;
474 | };
475 | name = Debug;
476 | };
477 | D48B3B3318CDFA7800903A1C /* Release */ = {
478 | isa = XCBuildConfiguration;
479 | buildSettings = {
480 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
481 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
482 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
483 | GCC_PREFIX_HEADER = "GWQuestionnaireDemo/GWQuestionnaireDemo-Prefix.pch";
484 | INFOPLIST_FILE = "GWQuestionnaireDemo/GWQuestionnaireDemo-Info.plist";
485 | PRODUCT_NAME = "$(TARGET_NAME)";
486 | WRAPPER_EXTENSION = app;
487 | };
488 | name = Release;
489 | };
490 | D48B3B3518CDFA7800903A1C /* Debug */ = {
491 | isa = XCBuildConfiguration;
492 | buildSettings = {
493 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
494 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/GWQuestionnaireDemo.app/GWQuestionnaireDemo";
495 | FRAMEWORK_SEARCH_PATHS = (
496 | "$(SDKROOT)/Developer/Library/Frameworks",
497 | "$(inherited)",
498 | "$(DEVELOPER_FRAMEWORKS_DIR)",
499 | );
500 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
501 | GCC_PREFIX_HEADER = "GWQuestionnaireDemo/GWQuestionnaireDemo-Prefix.pch";
502 | GCC_PREPROCESSOR_DEFINITIONS = (
503 | "DEBUG=1",
504 | "$(inherited)",
505 | );
506 | INFOPLIST_FILE = "GWQuestionnaireDemoTests/GWQuestionnaireDemoTests-Info.plist";
507 | PRODUCT_NAME = "$(TARGET_NAME)";
508 | TEST_HOST = "$(BUNDLE_LOADER)";
509 | WRAPPER_EXTENSION = xctest;
510 | };
511 | name = Debug;
512 | };
513 | D48B3B3618CDFA7800903A1C /* Release */ = {
514 | isa = XCBuildConfiguration;
515 | buildSettings = {
516 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
517 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/GWQuestionnaireDemo.app/GWQuestionnaireDemo";
518 | FRAMEWORK_SEARCH_PATHS = (
519 | "$(SDKROOT)/Developer/Library/Frameworks",
520 | "$(inherited)",
521 | "$(DEVELOPER_FRAMEWORKS_DIR)",
522 | );
523 | GCC_PRECOMPILE_PREFIX_HEADER = YES;
524 | GCC_PREFIX_HEADER = "GWQuestionnaireDemo/GWQuestionnaireDemo-Prefix.pch";
525 | INFOPLIST_FILE = "GWQuestionnaireDemoTests/GWQuestionnaireDemoTests-Info.plist";
526 | PRODUCT_NAME = "$(TARGET_NAME)";
527 | TEST_HOST = "$(BUNDLE_LOADER)";
528 | WRAPPER_EXTENSION = xctest;
529 | };
530 | name = Release;
531 | };
532 | /* End XCBuildConfiguration section */
533 |
534 | /* Begin XCConfigurationList section */
535 | D48B3AF718CDFA7800903A1C /* Build configuration list for PBXProject "GWQuestionnaireDemo" */ = {
536 | isa = XCConfigurationList;
537 | buildConfigurations = (
538 | D48B3B2F18CDFA7800903A1C /* Debug */,
539 | D48B3B3018CDFA7800903A1C /* Release */,
540 | );
541 | defaultConfigurationIsVisible = 0;
542 | defaultConfigurationName = Release;
543 | };
544 | D48B3B3118CDFA7800903A1C /* Build configuration list for PBXNativeTarget "GWQuestionnaireDemo" */ = {
545 | isa = XCConfigurationList;
546 | buildConfigurations = (
547 | D48B3B3218CDFA7800903A1C /* Debug */,
548 | D48B3B3318CDFA7800903A1C /* Release */,
549 | );
550 | defaultConfigurationIsVisible = 0;
551 | };
552 | D48B3B3418CDFA7800903A1C /* Build configuration list for PBXNativeTarget "GWQuestionnaireDemoTests" */ = {
553 | isa = XCConfigurationList;
554 | buildConfigurations = (
555 | D48B3B3518CDFA7800903A1C /* Debug */,
556 | D48B3B3618CDFA7800903A1C /* Release */,
557 | );
558 | defaultConfigurationIsVisible = 0;
559 | };
560 | /* End XCConfigurationList section */
561 | };
562 | rootObject = D48B3AF418CDFA7800903A1C /* Project object */;
563 | }
564 |
--------------------------------------------------------------------------------