Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d028e4078c |
@@ -19,5 +19,3 @@ DerivedData
|
||||
|
||||
#CocoaPods
|
||||
Pods
|
||||
Tests/Pods
|
||||
Tests/Podfile.lock
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
language: objective-c
|
||||
before_install:
|
||||
- gem install cocoapods --no-rdoc --no-ri --no-document --quiet
|
||||
- gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||
- cd Tests && pod install && cd $TRAVIS_BUILD_DIR
|
||||
script: rake test
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
// AppDelegate.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -29,5 +31,8 @@
|
||||
|
||||
@property (strong, nonatomic) UIWindow *window;
|
||||
|
||||
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
|
||||
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
|
||||
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,154 @@
|
||||
//
|
||||
// AppDelegate.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "ExamplesFormViewController.h"
|
||||
#import "AppDelegate.h"
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
@synthesize managedObjectContext = _managedObjectContext;
|
||||
@synthesize managedObjectModel = _managedObjectModel;
|
||||
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||
// Override point for customization after application launch.
|
||||
self.window.backgroundColor = [UIColor whiteColor];
|
||||
|
||||
ExamplesFormViewController * simpleFormViewController = [[ExamplesFormViewController alloc] init];
|
||||
UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:simpleFormViewController];
|
||||
|
||||
[self.window setRootViewController:navController];
|
||||
[self.window makeKeyAndVisible];
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (void)applicationWillTerminate:(UIApplication *)application
|
||||
{
|
||||
// Saves changes in the application's managed object context before the application terminates.
|
||||
[self saveContext];
|
||||
}
|
||||
|
||||
|
||||
- (void)saveContext
|
||||
{
|
||||
NSError *error = nil;
|
||||
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
|
||||
if (managedObjectContext != nil) {
|
||||
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
|
||||
// Replace this implementation with code to handle the error appropriately.
|
||||
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Core Data stack
|
||||
|
||||
// Returns the managed object context for the application.
|
||||
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
|
||||
- (NSManagedObjectContext *)managedObjectContext
|
||||
{
|
||||
if (_managedObjectContext != nil) {
|
||||
return _managedObjectContext;
|
||||
}
|
||||
|
||||
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
|
||||
if (coordinator != nil) {
|
||||
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
|
||||
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
|
||||
}
|
||||
return _managedObjectContext;
|
||||
}
|
||||
|
||||
// Returns the managed object model for the application.
|
||||
// If the model doesn't already exist, it is created from the application's model.
|
||||
- (NSManagedObjectModel *)managedObjectModel
|
||||
{
|
||||
if (_managedObjectModel != nil) {
|
||||
return _managedObjectModel;
|
||||
}
|
||||
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Lynkos" withExtension:@"momd"];
|
||||
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
|
||||
return _managedObjectModel;
|
||||
}
|
||||
|
||||
// Returns the persistent store coordinator for the application.
|
||||
// If the coordinator doesn't already exist, it is created and the application's store added to it.
|
||||
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
|
||||
{
|
||||
if (_persistentStoreCoordinator != nil) {
|
||||
return _persistentStoreCoordinator;
|
||||
}
|
||||
|
||||
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"XLForm.sqlite"];
|
||||
|
||||
NSError *error = nil;
|
||||
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
|
||||
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
|
||||
/*
|
||||
Replace this implementation with code to handle the error appropriately.
|
||||
|
||||
abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||
|
||||
Typical reasons for an error here include:
|
||||
* The persistent store is not accessible;
|
||||
* The schema for the persistent store is incompatible with current managed object model.
|
||||
Check the error message to determine what the actual problem was.
|
||||
|
||||
|
||||
If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.
|
||||
|
||||
If you encounter schema incompatibility errors during development, you can reduce their frequency by:
|
||||
* Simply deleting the existing store:
|
||||
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]
|
||||
|
||||
* Performing automatic lightweight migration by passing the following dictionary as the options parameter:
|
||||
@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES}
|
||||
|
||||
Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.
|
||||
|
||||
*/
|
||||
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
|
||||
abort();
|
||||
}
|
||||
return _persistentStoreCoordinator;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Application's Documents directory
|
||||
|
||||
// Returns the URL to the application's Documents directory.
|
||||
- (NSURL *)applicationDocumentsDirectory
|
||||
{
|
||||
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -2,6 +2,8 @@
|
||||
// DatesFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -0,0 +1,102 @@
|
||||
//
|
||||
// DatesFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
NSString *const kDateInline = @"dateInline";
|
||||
NSString *const kTimeInline = @"timeInline";
|
||||
NSString *const kDateTimeInline = @"dateTimeInline";
|
||||
|
||||
NSString *const kDate = @"date";
|
||||
NSString *const kTime = @"time";
|
||||
NSString *const kDateTime = @"dateTime";
|
||||
|
||||
#import "DatesFormViewController.h"
|
||||
|
||||
|
||||
@implementation DatesFormViewController
|
||||
|
||||
|
||||
- (id)init
|
||||
{
|
||||
XLFormDescriptor * form;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
form = [XLFormDescriptor formDescriptorWithTitle:@"Dates"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Inline Dates"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateInline rowType:XLFormRowDescriptorTypeDateInline title:@"Date"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// DateTime
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTimeInline rowType:XLFormRowDescriptorTypeTimeInline title:@"Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Time
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateTimeInline rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Date Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Dates"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDate rowType:XLFormRowDescriptorTypeDate title:@"Date"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// DateTime
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTime rowType:XLFormRowDescriptorTypeTime title:@"Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Time
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateTime rowType:XLFormRowDescriptorTypeDateTime title:@"Date Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Disabled Dates"];
|
||||
section.footerTitle = @"DatesFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDate rowType:XLFormRowDescriptorTypeDate title:@"Date"];
|
||||
row.disabled = YES;
|
||||
row.required = YES;
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
return [super initWithForm:form];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 1021 KiB After Width: | Height: | Size: 1021 KiB |
@@ -2,6 +2,8 @@
|
||||
// ExamplesFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -2,6 +2,8 @@
|
||||
// ExamplesFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -30,16 +32,12 @@
|
||||
#import "MultiValuedFormViewController.h"
|
||||
#import "ExamplesFormViewController.h"
|
||||
#import "NativeEventFormViewController.h"
|
||||
#import "UICustomizationFormViewController.h"
|
||||
#import "CustomRowsViewController.h"
|
||||
#import "AccessoryViewFormViewController.h"
|
||||
|
||||
NSString * const kTextFieldAndTextView = @"TextFieldAndTextView";
|
||||
NSString * const kSelectors = @"Selectors";
|
||||
NSString * const kOthes = @"Others";
|
||||
NSString * const kDates = @"Dates";
|
||||
NSString * const kMultivalued = @"Multivalued";
|
||||
NSString * const kValidations= @"Validations";
|
||||
|
||||
@interface ExamplesFormViewController ()
|
||||
|
||||
@@ -47,111 +45,57 @@ NSString * const kValidations= @"Validations";
|
||||
|
||||
@implementation ExamplesFormViewController
|
||||
|
||||
|
||||
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self){
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
-(id)initWithCoder:(NSCoder *)aDecoder
|
||||
{
|
||||
self = [super initWithCoder:aDecoder];
|
||||
if (self){
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Helper
|
||||
|
||||
-(void)initializeForm
|
||||
- (id)init
|
||||
{
|
||||
XLFormDescriptor * form;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
form = [XLFormDescriptor formDescriptor];
|
||||
|
||||
form = [XLFormDescriptor formDescriptorWithTitle:@"Examples"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Real examples"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// NativeEventFormViewController
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"realExamples" rowType:XLFormRowDescriptorTypeButton title:@"iOS Calendar Event Form"];
|
||||
row.action.formSegueIdenfifier = @"NativeEventNavigationViewControllerSegue";
|
||||
row.buttonViewController = [NativeEventNavigationViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"This form is actually an example"];
|
||||
section.footerTitle = @"ExamplesFormViewController.h, Select an option to view another example";
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
// TextFieldAndTextView
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTextFieldAndTextView rowType:XLFormRowDescriptorTypeButton title:@"Text Fields"];
|
||||
row.action.viewControllerClass = [InputsFormViewController class];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTextFieldAndTextView rowType:XLFormRowDescriptorTypeButton title:@"Text Fields Examles"];
|
||||
row.buttonViewController = [InputsFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Selectors
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectors rowType:XLFormRowDescriptorTypeButton title:@"Selectors"];
|
||||
row.action.formSegueIdenfifier = @"SelectorsFormViewControllerSegue";
|
||||
row.buttonViewController = [SelectorsFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Dates
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDates rowType:XLFormRowDescriptorTypeButton title:@"Dates"];
|
||||
row.action.viewControllerClass = [DatesFormViewController class];
|
||||
row.buttonViewController = [DatesFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Others
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kOthes rowType:XLFormRowDescriptorTypeButton title:@"Other Rows"];
|
||||
row.action.formSegueIdenfifier = @"OthersFormViewControllerSegue";
|
||||
row.buttonViewController = [OthersFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Multivalued example"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultivalued rowType:XLFormRowDescriptorTypeButton title:@"MultiValued Sections"];
|
||||
row.action.viewControllerClass = [MultiValuedFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"UI Customization"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultivalued rowType:XLFormRowDescriptorTypeButton title:@"UI Customization"];
|
||||
row.action.viewControllerClass = [UICustomizationFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Custom Rows"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultivalued rowType:XLFormRowDescriptorTypeButton title:@"Custom Rows"];
|
||||
row.action.viewControllerClass = [CustomRowsViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Accessory View"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultivalued rowType:XLFormRowDescriptorTypeButton title:@"Accessory Views"];
|
||||
row.action.viewControllerClass = [AccessoryViewFormViewController class];
|
||||
row.buttonViewController = [MultiValuedFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Validation Examples"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kValidations rowType:XLFormRowDescriptorTypeButton title:@"Validation Examples"];
|
||||
row.action.formSegueIdenfifier = @"ValidationExamplesFormViewControllerSegue";
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = form;
|
||||
|
||||
return [super initWithForm:form formMode:XLFormModeCreate showCancelButton:NO showSaveButton:NO showDeleteButton:NO deleteButtonCaption:nil];
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
// InputsFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -2,6 +2,8 @@
|
||||
// InputsFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -32,7 +34,6 @@ NSString *const kEmail = @"email";
|
||||
NSString *const kTwitter = @"twitter";
|
||||
NSString *const kNumber = @"number";
|
||||
NSString *const kInteger = @"integer";
|
||||
NSString *const kDecimal = @"decimal";
|
||||
NSString *const kPassword = @"password";
|
||||
NSString *const kPhone = @"phone";
|
||||
NSString *const kUrl = @"url";
|
||||
@@ -44,7 +45,7 @@ NSString *const kNotes = @"notes";
|
||||
|
||||
-(id)init
|
||||
{
|
||||
XLFormDescriptor * formDescriptor = [XLFormDescriptor formDescriptorWithTitle:@"Text Fields"];
|
||||
XLFormDescriptor * formDescriptor = [XLFormDescriptor formDescriptorWithTitle:@"Simple Form"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
@@ -62,8 +63,6 @@ NSString *const kNotes = @"notes";
|
||||
|
||||
// Email
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kEmail rowType:XLFormRowDescriptorTypeEmail title:@"Email"];
|
||||
// validate the email
|
||||
[row addValidator:[XLFormValidator emailValidator]];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Twitter
|
||||
@@ -79,10 +78,6 @@ NSString *const kNotes = @"notes";
|
||||
// Integer
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kInteger rowType:XLFormRowDescriptorTypeInteger title:@"Integer"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Decimal
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDecimal rowType:XLFormRowDescriptorTypeDecimal title:@"Decimal"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Password
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kPassword rowType:XLFormRowDescriptorTypePassword title:@"Password"];
|
||||
@@ -110,35 +105,8 @@ NSString *const kNotes = @"notes";
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kNotes rowType:XLFormRowDescriptorTypeTextView title:@"Notes"];
|
||||
[section addFormRow:row];
|
||||
|
||||
return [super initWithForm:formDescriptor formMode:XLFormModeCreate showCancelButton:NO showSaveButton:YES showDeleteButton:NO deleteButtonCaption:@"Remove SingleForm"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Dynamic Text View"];
|
||||
[formDescriptor addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTextView rowType:XLFormRowDescriptorTypeDynamicTextView];
|
||||
[row.cellConfigAtConfigure setObject:@"DYNAMIC TEXT VIEW EXAMPLE" forKey:@"textView.placeholder"];
|
||||
[row.cellConfigAtConfigure setObject:@(50) forKey:@"defaultHeight"];
|
||||
[section addFormRow:row];
|
||||
|
||||
return [super initWithForm:formDescriptor];
|
||||
|
||||
}
|
||||
|
||||
-(void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePressed:)];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)savePressed:(UIBarButtonItem * __unused)button
|
||||
{
|
||||
NSArray * validationErrors = [self formValidationErrors];
|
||||
if (validationErrors.count > 0){
|
||||
[self showFormValidationError:[validationErrors firstObject]];
|
||||
return;
|
||||
}
|
||||
[self.tableView endEditing:YES];
|
||||
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Valid Form", nil) message:@"No errors found" delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
|
||||
[alertView show];
|
||||
}
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 813 KiB After Width: | Height: | Size: 813 KiB |
@@ -2,6 +2,8 @@
|
||||
// MultiValuedFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -2,6 +2,8 @@
|
||||
// MultiValuedFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
|
Before Width: | Height: | Size: 1.5 MiB After Width: | Height: | Size: 1.5 MiB |
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// AccessoryViewFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2015 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface AccessoryViewFormViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,217 +0,0 @@
|
||||
//
|
||||
// AccessoryViewFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2015 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "AccessoryViewFormViewController.h"
|
||||
|
||||
@interface AccessoryViewFormViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation AccessoryViewFormViewController
|
||||
{
|
||||
XLFormRowDescriptor * _rowShowAccessoryView;
|
||||
XLFormRowDescriptor * _rowStopDisableRow;
|
||||
XLFormRowDescriptor * _rowStopInlineRow;
|
||||
XLFormRowDescriptor * _rowSkipCanNotBecomeFirstResponderRow;
|
||||
}
|
||||
|
||||
|
||||
NSString * kAccessoryViewRowNavigationEnabled = @"kRowNavigationEnabled";
|
||||
NSString * kAccessoryViewRowNavigationShowAccessoryView = @"kRowNavigationShowAccessoryView";
|
||||
NSString * kAccessoryViewRowNavigationStopDisableRow = @"rowNavigationStopDisableRow";
|
||||
NSString * kAccessoryViewRowNavigationSkipCanNotBecomeFirstResponderRow = @"rowNavigationSkipCanNotBecomeFirstResponderRow";
|
||||
NSString * kAccessoryViewRowNavigationStopInlineRow = @"rowNavigationStopInlineRow";
|
||||
NSString * kAccessoryViewName = @"name";
|
||||
NSString * kAccessoryViewEmail = @"email";
|
||||
NSString * kAccessoryViewTwitter = @"twitter";
|
||||
NSString * kAccessoryViewUrl = @"url";
|
||||
NSString * kAccessoryViewDate = @"date";
|
||||
NSString * kAccessoryViewTextView = @"textView";
|
||||
NSString * kAccessoryViewCheck = @"check";
|
||||
NSString * kAccessoryViewNotes = @"notes";
|
||||
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * formDescriptor = [XLFormDescriptor formDescriptorWithTitle:@"Accessory View"];
|
||||
formDescriptor.rowNavigationOptions = XLFormRowNavigationOptionEnabled;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
|
||||
// Configuration section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Row Navigation Settings"];
|
||||
section.footerTitle = @"Changing the Settings values you will navigate differently";
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// RowNavigationEnabled
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewRowNavigationEnabled rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"Row Navigation Enabled?"];
|
||||
row.value = @YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
// RowNavigationShowAccessoryView
|
||||
_rowShowAccessoryView = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewRowNavigationShowAccessoryView rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Show input accessory view?"];
|
||||
_rowShowAccessoryView.value = @((formDescriptor.rowNavigationOptions & XLFormRowNavigationOptionEnabled) == XLFormRowNavigationOptionEnabled);
|
||||
[section addFormRow:_rowShowAccessoryView];
|
||||
|
||||
// RowNavigationStopDisableRow
|
||||
_rowStopDisableRow = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewRowNavigationStopDisableRow rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Stop when reach disabled row?"];
|
||||
_rowStopDisableRow.value = @((formDescriptor.rowNavigationOptions & XLFormRowNavigationOptionStopDisableRow) == XLFormRowNavigationOptionStopDisableRow);
|
||||
[section addFormRow:_rowStopDisableRow];
|
||||
|
||||
// RowNavigationStopInlineRow
|
||||
_rowStopInlineRow = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewRowNavigationStopInlineRow rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Stop when reach inline row?"];
|
||||
_rowStopInlineRow.value = @((formDescriptor.rowNavigationOptions & XLFormRowNavigationOptionStopInlineRow) == XLFormRowNavigationOptionStopInlineRow);
|
||||
[section addFormRow:_rowStopInlineRow];
|
||||
|
||||
// RowNavigationSkipCanNotBecomeFirstResponderRow
|
||||
_rowSkipCanNotBecomeFirstResponderRow = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewRowNavigationSkipCanNotBecomeFirstResponderRow rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Skip Can Not Become First Responder Row?"];
|
||||
_rowSkipCanNotBecomeFirstResponderRow.value = @((formDescriptor.rowNavigationOptions & XLFormRowNavigationOptionSkipCanNotBecomeFirstResponderRow) == XLFormRowNavigationOptionSkipCanNotBecomeFirstResponderRow);
|
||||
[section addFormRow:_rowSkipCanNotBecomeFirstResponderRow];
|
||||
|
||||
// Basic Information - Section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"TextField Types"];
|
||||
section.footerTitle = @"This is a long text that will appear on section footer";
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// Name
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewName rowType:XLFormRowDescriptorTypeText title:@"Name"];
|
||||
row.required = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
// Email
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewEmail rowType:XLFormRowDescriptorTypeEmail title:@"Email"];
|
||||
// validate the email
|
||||
[row addValidator:[XLFormValidator emailValidator]];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Twitter
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewTwitter rowType:XLFormRowDescriptorTypeTwitter title:@"Twitter"];
|
||||
row.disabled = YES;
|
||||
row.value = @"@no_editable";
|
||||
[section addFormRow:row];
|
||||
|
||||
// Url
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewUrl rowType:XLFormRowDescriptorTypeURL title:@"Url"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Url
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewDate rowType:XLFormRowDescriptorTypeDateInline title:@"Date Inline"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewTextView rowType:XLFormRowDescriptorTypeTextView];
|
||||
[row.cellConfigAtConfigure setObject:@"TEXT VIEW EXAMPLE" forKey:@"textView.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewCheck rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Ckeck"];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"TextView With Label Example"];
|
||||
[formDescriptor addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kAccessoryViewNotes rowType:XLFormRowDescriptorTypeTextView title:@"Notes"];
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = formDescriptor;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - XLFormDescriptorDelegate
|
||||
|
||||
-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
|
||||
{
|
||||
[super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];
|
||||
NSString * kRowNavigationEnabled = @"kRowNavigationEnabled";
|
||||
if ([rowDescriptor.tag isEqualToString:kRowNavigationEnabled]){
|
||||
if ([[rowDescriptor.value valueData] isEqual:@NO]){
|
||||
self.form.rowNavigationOptions = XLFormRowNavigationOptionNone;
|
||||
[self.form removeFormRowWithTag:kAccessoryViewRowNavigationShowAccessoryView];
|
||||
[self.form removeFormRowWithTag:kAccessoryViewRowNavigationStopDisableRow];
|
||||
[self.form removeFormRowWithTag:kAccessoryViewRowNavigationStopInlineRow];
|
||||
[self.form removeFormRowWithTag:kAccessoryViewRowNavigationSkipCanNotBecomeFirstResponderRow];
|
||||
}
|
||||
else{
|
||||
self.form.rowNavigationOptions = XLFormRowNavigationOptionEnabled;
|
||||
_rowShowAccessoryView.value = @YES;
|
||||
_rowStopDisableRow.value = @NO;
|
||||
_rowStopInlineRow.value = @NO;
|
||||
_rowSkipCanNotBecomeFirstResponderRow.value = @NO;
|
||||
[self.form addFormRow:_rowShowAccessoryView afterRow:rowDescriptor];
|
||||
[self.form addFormRow:_rowStopDisableRow afterRow:_rowShowAccessoryView];
|
||||
[self.form addFormRow:_rowStopInlineRow afterRow:_rowStopDisableRow];
|
||||
[self.form addFormRow:_rowSkipCanNotBecomeFirstResponderRow afterRow:_rowStopInlineRow];
|
||||
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:kAccessoryViewRowNavigationStopDisableRow]){
|
||||
if ([[rowDescriptor.value valueData] isEqual:@(YES)]){
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions | XLFormRowNavigationOptionStopDisableRow;
|
||||
}
|
||||
else{
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions & (~XLFormRowNavigationOptionStopDisableRow);
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:kAccessoryViewRowNavigationStopInlineRow]){
|
||||
if ([[rowDescriptor.value valueData] isEqual:@(YES)]){
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions | XLFormRowNavigationOptionStopInlineRow;
|
||||
}
|
||||
else{
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions & (~XLFormRowNavigationOptionStopInlineRow);
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:kAccessoryViewRowNavigationSkipCanNotBecomeFirstResponderRow]){
|
||||
if ([[rowDescriptor.value valueData] isEqual:@(YES)]){
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions | XLFormRowNavigationOptionSkipCanNotBecomeFirstResponderRow;
|
||||
}
|
||||
else{
|
||||
self.form.rowNavigationOptions = self.form.rowNavigationOptions & (~XLFormRowNavigationOptionSkipCanNotBecomeFirstResponderRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(UIView *)inputAccessoryViewForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor
|
||||
{
|
||||
if ([[[self.form formRowWithTag:kAccessoryViewRowNavigationShowAccessoryView].value valueData] isEqual:@NO]){
|
||||
return nil;
|
||||
}
|
||||
return [super inputAccessoryViewForRowDescriptor:rowDescriptor];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,48 +0,0 @@
|
||||
//
|
||||
// AppDelegate.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "CoreDataStore.h"
|
||||
#import "ExamplesFormViewController.h"
|
||||
#import "AppDelegate.h"
|
||||
|
||||
|
||||
@implementation AppDelegate
|
||||
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||
// Override point for customization after application launch.
|
||||
self.window.backgroundColor = [UIColor whiteColor];
|
||||
|
||||
// load the initial form form Storybiard
|
||||
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"iPhoneStoryboard" bundle:nil];
|
||||
[self.window setRootViewController:[storyboard instantiateInitialViewController]];
|
||||
[self.window makeKeyAndVisible];
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,29 +0,0 @@
|
||||
// CustomRowsViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface CustomRowsViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,92 +0,0 @@
|
||||
// CustomRowsViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "CustomRowsViewController.h"
|
||||
#import "XLForm.h"
|
||||
#import "XLFormWeekDaysCell.h"
|
||||
#import "XLFormRatingCell.h"
|
||||
#import "FloatLabeledTextFieldCell.h"
|
||||
|
||||
static NSString * const kCustomRowFirstRatingTag = @"CustomRowFirstRatingTag";
|
||||
static NSString * const kCustomRowSecondRatingTag = @"CustomRowSecondRatingTag";
|
||||
static NSString * const kCustomRowFloatLabeledTextFieldTag = @"CustomRowFloatLabeledTextFieldTag";
|
||||
static NSString * const kCustomRowWeekdays = @"CustomRowWeekdays";
|
||||
|
||||
@implementation CustomRowsViewController
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Custom Rows"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Section Ratings
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Ratings"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kCustomRowFirstRatingTag rowType:XLFormRowDescriptorTypeRate title:@"First Rating"];
|
||||
row.value = @(3);
|
||||
[section addFormRow:row];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kCustomRowSecondRatingTag rowType:XLFormRowDescriptorTypeRate title:@"Second Rating"];
|
||||
row.value = @(1);
|
||||
[section addFormRow:row];
|
||||
|
||||
// Section Float Labeled Text Field
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Float Labeled Text Field"];
|
||||
[form addFormSection:section];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kCustomRowFloatLabeledTextFieldTag rowType:XLFormRowDescriptorTypeFloatLabeledTextField title:@"Title"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Section Weekdays
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Weekdays"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// WeekDays
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kCustomRowWeekdays rowType:XLFormRowDescriptorTypeWeekDays];
|
||||
row.value = @{
|
||||
kSunday: @(NO),
|
||||
kMonday: @(YES),
|
||||
kTuesday: @(YES),
|
||||
kWednesday: @(NO),
|
||||
kThursday: @(NO),
|
||||
kFriday: @(NO),
|
||||
kSaturday: @(NO)
|
||||
};
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,31 +0,0 @@
|
||||
// FloatLabeledTextFieldCell.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormBaseCell.h"
|
||||
|
||||
extern NSString * const XLFormRowDescriptorTypeFloatLabeledTextField;
|
||||
|
||||
@interface FloatLabeledTextFieldCell : XLFormBaseCell
|
||||
|
||||
@end
|
||||
@@ -1,187 +0,0 @@
|
||||
// FloatLabeledTextFieldCell.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "FloatLabeledTextFieldCell.h"
|
||||
#import "UIView+XLFormAdditions.h"
|
||||
#import "JVFloatLabeledTextField.h"
|
||||
#import "NSObject+XLFormAdditions.h"
|
||||
|
||||
#import <JVFloatLabeledTextField/JVFloatLabeledTextField.h>
|
||||
|
||||
NSString * const XLFormRowDescriptorTypeFloatLabeledTextField = @"XLFormRowDescriptorTypeFloatLabeledTextField";
|
||||
|
||||
const static CGFloat kHMargin = 15.0f;
|
||||
const static CGFloat kVMargin = 8.0f;
|
||||
const static CGFloat kFloatingLabelFontSize = 11.0f;
|
||||
|
||||
@interface FloatLabeledTextFieldCell () <UITextFieldDelegate>
|
||||
@property (nonatomic) JVFloatLabeledTextField * floatLabeledTextField;
|
||||
@end
|
||||
|
||||
@implementation FloatLabeledTextFieldCell
|
||||
|
||||
@synthesize floatLabeledTextField =_floatLabeledTextField;
|
||||
|
||||
+(void)load
|
||||
{
|
||||
[XLFormViewController.cellClassesForRowDescriptorTypes setObject:[FloatLabeledTextFieldCell class] forKey:XLFormRowDescriptorTypeFloatLabeledTextField];
|
||||
}
|
||||
|
||||
-(JVFloatLabeledTextField *)floatLabeledTextField
|
||||
{
|
||||
if (_floatLabeledTextField) return _floatLabeledTextField;
|
||||
|
||||
_floatLabeledTextField = [JVFloatLabeledTextField autolayoutView];
|
||||
_floatLabeledTextField.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
|
||||
_floatLabeledTextField.floatingLabel.font = [UIFont boldSystemFontOfSize:kFloatingLabelFontSize];
|
||||
|
||||
_floatLabeledTextField.clearButtonMode = UITextFieldViewModeWhileEditing;
|
||||
return _floatLabeledTextField;
|
||||
}
|
||||
|
||||
#pragma mark - XLFormDescriptorCell
|
||||
|
||||
-(void)configure
|
||||
{
|
||||
[super configure];
|
||||
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
|
||||
[self.contentView addSubview:self.floatLabeledTextField];
|
||||
[self.floatLabeledTextField setDelegate:self];
|
||||
[self.contentView addConstraints:[self layoutConstraints]];
|
||||
}
|
||||
|
||||
-(void)update
|
||||
{
|
||||
[super update];
|
||||
|
||||
self.floatLabeledTextField.attributedPlaceholder =
|
||||
[[NSAttributedString alloc] initWithString:self.rowDescriptor.title
|
||||
attributes:@{NSForegroundColorAttributeName: [UIColor darkGrayColor]}];
|
||||
|
||||
self.floatLabeledTextField.text = self.rowDescriptor.value ? [self.rowDescriptor.value displayText] : self.rowDescriptor.noValueDisplayText;
|
||||
[self.floatLabeledTextField setEnabled:!self.rowDescriptor.disabled];
|
||||
|
||||
self.floatLabeledTextField.textColor = self.rowDescriptor.disabled ? [UIColor grayColor] : [UIColor blackColor];
|
||||
self.floatLabeledTextField.floatingLabelTextColor = [UIColor lightGrayColor];
|
||||
}
|
||||
|
||||
-(BOOL)formDescriptorCellBecomeFirstResponder
|
||||
{
|
||||
return [self.floatLabeledTextField becomeFirstResponder];
|
||||
}
|
||||
|
||||
-(BOOL)formDescriptorCellResignFirstResponder
|
||||
{
|
||||
return [self.floatLabeledTextField resignFirstResponder];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - UITextFieldDelegate
|
||||
|
||||
- (BOOL)textFieldShouldClear:(UITextField *)textField
|
||||
{
|
||||
return [self.formViewController textFieldShouldClear:textField];
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField
|
||||
{
|
||||
return [self.formViewController textFieldShouldReturn:textField];
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
|
||||
{
|
||||
return [self.formViewController textFieldShouldBeginEditing:textField];
|
||||
}
|
||||
|
||||
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
|
||||
{
|
||||
return [self.formViewController textFieldShouldEndEditing:textField];
|
||||
}
|
||||
|
||||
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
|
||||
return [self.formViewController textField:textField shouldChangeCharactersInRange:range replacementString:string];
|
||||
}
|
||||
|
||||
- (void)textFieldDidBeginEditing:(UITextField *)textField
|
||||
{
|
||||
[self.formViewController textFieldDidBeginEditing:textField];
|
||||
}
|
||||
|
||||
- (void)textFieldDidEndEditing:(UITextField *)textField
|
||||
{
|
||||
[self textFieldDidChange:textField];
|
||||
[self.formViewController textFieldDidEndEditing:textField];
|
||||
}
|
||||
|
||||
-(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
|
||||
{
|
||||
self.floatLabeledTextField.returnKeyType = returnKeyType;
|
||||
}
|
||||
|
||||
-(UIReturnKeyType)returnKeyType
|
||||
{
|
||||
return self.floatLabeledTextField.returnKeyType;
|
||||
}
|
||||
|
||||
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor {
|
||||
return 55;
|
||||
}
|
||||
|
||||
|
||||
|
||||
-(NSArray *)layoutConstraints
|
||||
{
|
||||
NSMutableArray * result = [[NSMutableArray alloc] init];
|
||||
|
||||
NSDictionary * views = @{@"floatLabeledTextField": self.floatLabeledTextField};
|
||||
NSDictionary *metrics = @{@"hMargin":@(kHMargin),
|
||||
@"vMargin":@(kVMargin)};
|
||||
|
||||
[result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(hMargin)-[floatLabeledTextField]-(hMargin)-|"
|
||||
options:0
|
||||
metrics:metrics
|
||||
views:views]];
|
||||
[result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(vMargin)-[floatLabeledTextField]-(vMargin)-|"
|
||||
options:0
|
||||
metrics:metrics
|
||||
views:views]];
|
||||
return result;
|
||||
}
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
- (void)textFieldDidChange:(UITextField *)textField
|
||||
{
|
||||
if (self.floatLabeledTextField == textField) {
|
||||
if ([self.floatLabeledTextField.text length] > 0) {
|
||||
self.rowDescriptor.value = self.floatLabeledTextField.text;
|
||||
} else {
|
||||
self.rowDescriptor.value = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,29 +0,0 @@
|
||||
// XLRatingView.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <AXRatingView/AXRatingView.h>
|
||||
|
||||
@interface XLRatingView : AXRatingView
|
||||
|
||||
@end
|
||||
@@ -1,69 +0,0 @@
|
||||
// XLRatingView.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLRatingView.h"
|
||||
|
||||
@implementation XLRatingView
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self customize];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
[self customize];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(NSCoder *)aDecoder
|
||||
{
|
||||
self = [super initWithCoder:aDecoder];
|
||||
if (self) {
|
||||
[self customize];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)customize
|
||||
{
|
||||
UIColor * grayColor = [UIColor colorWithRed:(205/255.0) green:(201/255.0) blue:(201/255.0) alpha:1];
|
||||
self.baseColor = grayColor;
|
||||
|
||||
UIColor * goldColor = [UIColor colorWithRed:(255/255.0) green:(215/255.0) blue:0 alpha:1];
|
||||
self.highlightColor = goldColor;
|
||||
self.markFont = [UIFont systemFontOfSize:23.0f];
|
||||
self.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
self.stepInterval = 1.0f;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
// XLFormRatingCell.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormBaseCell.h"
|
||||
#import "XLRatingView.h"
|
||||
|
||||
extern NSString * const XLFormRowDescriptorTypeRate;
|
||||
|
||||
@interface XLFormRatingCell : XLFormBaseCell
|
||||
@property (weak, nonatomic) IBOutlet UILabel *rateTitle;
|
||||
@property (weak, nonatomic) IBOutlet XLRatingView *ratingView;
|
||||
|
||||
@end
|
||||
@@ -1,57 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="OGo-4x-YLf" customClass="XLFormRatingCell">
|
||||
<rect key="frame" x="0.0" y="0.0" width="478" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="OGo-4x-YLf" id="hV6-xt-6pq">
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yhI-dj-sRk" customClass="XLRatingView">
|
||||
<rect key="frame" x="353" y="11" width="115" height="22"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="22" id="85e-Ov-qM7"/>
|
||||
<constraint firstAttribute="width" constant="115" id="kOb-W4-HPs"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rate" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Vxp-gw-YTt">
|
||||
<rect key="frame" x="15" y="11" width="338" height="21"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="IK4-8e-SFs"/>
|
||||
<constraint firstAttribute="width" constant="150" id="hNG-F9-1wj"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="hNG-F9-1wj"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="Vxp-gw-YTt" secondAttribute="bottom" constant="11" id="0Qz-iR-Tzb"/>
|
||||
<constraint firstAttribute="centerY" secondItem="Vxp-gw-YTt" secondAttribute="centerY" id="4Vh-2e-m2p"/>
|
||||
<constraint firstAttribute="trailing" secondItem="yhI-dj-sRk" secondAttribute="trailing" constant="10" id="NPC-r7-JFl"/>
|
||||
<constraint firstAttribute="centerY" secondItem="yhI-dj-sRk" secondAttribute="centerY" id="Vw4-h8-wId"/>
|
||||
<constraint firstItem="Vxp-gw-YTt" firstAttribute="leading" secondItem="hV6-xt-6pq" secondAttribute="leading" constant="15" id="Xgq-Cy-zLQ"/>
|
||||
<constraint firstItem="Vxp-gw-YTt" firstAttribute="top" secondItem="hV6-xt-6pq" secondAttribute="top" constant="11" id="bgO-t8-Rjz"/>
|
||||
<constraint firstItem="yhI-dj-sRk" firstAttribute="leading" secondItem="Vxp-gw-YTt" secondAttribute="trailing" id="n0B-tg-Pik"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="rateTitle" destination="Vxp-gw-YTt" id="KRL-Lg-C7F"/>
|
||||
<outlet property="ratingView" destination="yhI-dj-sRk" id="QBD-SA-AlI"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="301" y="260"/>
|
||||
</tableViewCell>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -1,39 +0,0 @@
|
||||
// XLFormWeekDaysCell.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormBaseCell.h"
|
||||
|
||||
extern NSString * const XLFormRowDescriptorTypeWeekDays;
|
||||
|
||||
extern NSString *const kSunday;
|
||||
extern NSString *const kMonday;
|
||||
extern NSString *const kTuesday;
|
||||
extern NSString *const kWednesday;
|
||||
extern NSString *const kThursday;
|
||||
extern NSString *const kFriday;
|
||||
extern NSString *const kSaturday;
|
||||
|
||||
@interface XLFormWeekDaysCell : XLFormBaseCell
|
||||
|
||||
@end
|
||||
@@ -1,146 +0,0 @@
|
||||
// XLFormWeekDaysCell.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormWeekDaysCell.h"
|
||||
|
||||
NSString * const XLFormRowDescriptorTypeWeekDays = @"XLFormRowDescriptorTypeWeekDays";
|
||||
|
||||
NSString *const kSunday= @"sunday";
|
||||
NSString *const kMonday = @"monday";
|
||||
NSString *const kTuesday = @"tuesday";
|
||||
NSString *const kWednesday = @"wednesday";
|
||||
NSString *const kThursday = @"thursday";
|
||||
NSString *const kFriday = @"friday";
|
||||
NSString *const kSaturday = @"saturday";
|
||||
|
||||
@interface XLFormWeekDaysCell()
|
||||
@property (weak, nonatomic) IBOutlet UIButton *sundayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *mondayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *tuesdayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *wednesdayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *thursdayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *fridayButton;
|
||||
@property (weak, nonatomic) IBOutlet UIButton *saturdayButton;
|
||||
@end
|
||||
|
||||
@implementation XLFormWeekDaysCell
|
||||
|
||||
+(void)load
|
||||
{
|
||||
[XLFormViewController.cellClassesForRowDescriptorTypes setObject:NSStringFromClass([XLFormWeekDaysCell class]) forKey:XLFormRowDescriptorTypeWeekDays];
|
||||
}
|
||||
|
||||
#pragma mark - XLFormDescriptorCell
|
||||
|
||||
- (void)configure
|
||||
{
|
||||
[super configure];
|
||||
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self configureButtons];
|
||||
}
|
||||
|
||||
-(void)update
|
||||
{
|
||||
[super update];
|
||||
[self updateButtons];
|
||||
}
|
||||
|
||||
#pragma mark - Action
|
||||
|
||||
- (IBAction)dayTapped:(id)sender {
|
||||
[self dayTapped:sender day:[self getDayFormButton:sender]];
|
||||
}
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
-(void)configureButtons
|
||||
{
|
||||
for (UIView *subview in self.contentView.subviews)
|
||||
{
|
||||
if ([subview isKindOfClass:[UIButton class]])
|
||||
{
|
||||
UIButton * button = (UIButton *)subview;
|
||||
[button setImage:[UIImage imageNamed:@"uncheckedDay"] forState:UIControlStateNormal];
|
||||
[button setImage:[UIImage imageNamed:@"checkedDay"] forState:UIControlStateSelected];
|
||||
button.adjustsImageWhenHighlighted = NO;
|
||||
[self imageTopTitleBottom:button];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(void)updateButtons
|
||||
{
|
||||
NSDictionary * value = self.rowDescriptor.value;
|
||||
self.sundayButton.selected = [[value objectForKey:kSunday] boolValue];
|
||||
self.mondayButton.selected = [[value objectForKey:kMonday] boolValue];
|
||||
self.tuesdayButton.selected = [[value objectForKey:kTuesday] boolValue];
|
||||
self.wednesdayButton.selected = [[value objectForKey:kWednesday] boolValue];
|
||||
self.thursdayButton.selected = [[value objectForKey:kThursday] boolValue];
|
||||
self.fridayButton.selected = [[value objectForKey:kFriday] boolValue];
|
||||
self.saturdayButton.selected = [[value objectForKey:kSaturday] boolValue];
|
||||
}
|
||||
|
||||
-(NSString *)getDayFormButton:(id)sender
|
||||
{
|
||||
if (sender == self.sundayButton) return kSunday;
|
||||
if (sender == self.mondayButton) return kMonday;
|
||||
if (sender == self.tuesdayButton) return kTuesday;
|
||||
if (sender == self.wednesdayButton) return kWednesday;
|
||||
if (sender == self.thursdayButton) return kThursday;
|
||||
if (sender == self.fridayButton) return kFriday;
|
||||
return kSaturday;
|
||||
}
|
||||
|
||||
-(void)dayTapped:(UIButton *)button day:(NSString *)day
|
||||
{
|
||||
button.selected = !button.selected;
|
||||
NSMutableDictionary * value = [self.rowDescriptor.value mutableCopy];
|
||||
[value setObject:@(button.selected) forKey:day];
|
||||
self.rowDescriptor.value = value;
|
||||
}
|
||||
|
||||
-(void)imageTopTitleBottom:(UIButton *)button
|
||||
{
|
||||
// the space between the image and text
|
||||
CGFloat spacing = 3.0;
|
||||
|
||||
// lower the text and push it left so it appears centered
|
||||
// below the image
|
||||
CGSize imageSize = button.imageView.image.size;
|
||||
button.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width, - (imageSize.height + spacing), 0.0);
|
||||
|
||||
// raise the image and push it right so it appears centered
|
||||
// above the text
|
||||
CGSize titleSize = [button.titleLabel.text sizeWithAttributes:@{NSFontAttributeName: button.titleLabel.font}];
|
||||
button.imageEdgeInsets = UIEdgeInsetsMake(- (titleSize.height + spacing), 0.0, 0.0, - titleSize.width);
|
||||
}
|
||||
|
||||
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor
|
||||
{
|
||||
return 60;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,250 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="60" id="piA-L5-eiN" customClass="XLFormWeekDaysCell">
|
||||
<rect key="frame" x="0.0" y="0.0" width="382" height="50"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="piA-L5-eiN" id="Yr6-3E-keb">
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZAg-Me-yKR">
|
||||
<rect key="frame" x="5" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="S">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="selected">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="K4V-Xd-Bak"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UjQ-Cw-7wH" userLabel="separator 1">
|
||||
<rect key="frame" x="58" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="K3N-3h-MZr"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="N3w-qP-kRZ">
|
||||
<rect key="frame" x="58" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="M">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="FaQ-oB-Nkl"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kwc-0w-V51" userLabel="separator 2">
|
||||
<rect key="frame" x="111" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="3mE-sT-ql1"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cPl-47-rS8">
|
||||
<rect key="frame" x="111" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="T">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="4vk-5n-jge"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EiN-2p-Oig" userLabel="separator 3">
|
||||
<rect key="frame" x="164" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="JyW-GC-0A7"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6iC-Cl-RyI">
|
||||
<rect key="frame" x="164" y="0.0" width="54" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="W">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="oO1-zj-XRv"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bRc-5e-QAH" userLabel="separator 4">
|
||||
<rect key="frame" x="218" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="W9F-iR-Leh"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eTo-Ip-reh">
|
||||
<rect key="frame" x="218" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="T">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="SkQ-0a-9Fy"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dHj-rj-mjh" userLabel="separator 5">
|
||||
<rect key="frame" x="271" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="h5U-x0-9nJ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Wjb-tu-QEo">
|
||||
<rect key="frame" x="271" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="F">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="9A8-9a-SGG"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="L7g-lu-boa" userLabel="separator 6">
|
||||
<rect key="frame" x="324" y="10" width="1" height="29"/>
|
||||
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="1" id="81t-Xh-wZT"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LNf-b4-GYP">
|
||||
<rect key="frame" x="324" y="0.0" width="53" height="49"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="S">
|
||||
<color key="titleColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="dayTapped:" destination="piA-L5-eiN" eventType="touchUpInside" id="I4k-Ho-KxE"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="ZAg-Me-yKR" firstAttribute="leading" secondItem="Yr6-3E-keb" secondAttribute="leading" constant="5" id="0EB-cP-ogn"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="width" secondItem="cPl-47-rS8" secondAttribute="width" id="1ZI-HN-9ew"/>
|
||||
<constraint firstItem="cPl-47-rS8" firstAttribute="leading" secondItem="N3w-qP-kRZ" secondAttribute="trailing" id="1pQ-h0-SEG"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="leading" secondItem="6iC-Cl-RyI" secondAttribute="trailing" constant="1" id="2UA-Ao-KZF"/>
|
||||
<constraint firstItem="dHj-rj-mjh" firstAttribute="height" secondItem="L7g-lu-boa" secondAttribute="height" id="4dj-Xx-ksP"/>
|
||||
<constraint firstAttribute="bottom" secondItem="EiN-2p-Oig" secondAttribute="bottom" constant="10" id="5eK-Bu-wpU"/>
|
||||
<constraint firstItem="N3w-qP-kRZ" firstAttribute="leading" secondItem="ZAg-Me-yKR" secondAttribute="trailing" id="67F-sV-r6W"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="leading" secondItem="dHj-rj-mjh" secondAttribute="trailing" id="6ZX-Ub-2vw"/>
|
||||
<constraint firstItem="EiN-2p-Oig" firstAttribute="height" secondItem="bRc-5e-QAH" secondAttribute="height" id="7Um-cV-f7p"/>
|
||||
<constraint firstItem="LNf-b4-GYP" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="7YT-x4-m88"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="trailing" secondItem="bRc-5e-QAH" secondAttribute="leading" id="ABd-MQ-9sp"/>
|
||||
<constraint firstAttribute="bottom" secondItem="UjQ-Cw-7wH" secondAttribute="bottom" constant="10" id="ASC-xR-Yxa"/>
|
||||
<constraint firstAttribute="bottom" secondItem="dHj-rj-mjh" secondAttribute="bottom" constant="10" id="ASP-um-b8o"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="Aac-10-vTs"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="leading" secondItem="6iC-Cl-RyI" secondAttribute="trailing" id="BL5-PL-pac"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ZAg-Me-yKR" secondAttribute="bottom" id="BeZ-ar-qMN"/>
|
||||
<constraint firstItem="dHj-rj-mjh" firstAttribute="height" secondItem="bRc-5e-QAH" secondAttribute="height" id="DYn-Cd-g5H"/>
|
||||
<constraint firstAttribute="bottom" secondItem="kwc-0w-V51" secondAttribute="bottom" constant="10" id="EXu-BP-ftM"/>
|
||||
<constraint firstAttribute="bottom" secondItem="LNf-b4-GYP" secondAttribute="bottom" id="EYe-ne-rqO"/>
|
||||
<constraint firstItem="cPl-47-rS8" firstAttribute="leading" secondItem="N3w-qP-kRZ" secondAttribute="trailing" id="Fo8-Tp-bkn"/>
|
||||
<constraint firstItem="dHj-rj-mjh" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="GYq-pf-vR0"/>
|
||||
<constraint firstItem="cPl-47-rS8" firstAttribute="leading" secondItem="UjQ-Cw-7wH" secondAttribute="trailing" constant="72" id="HQ2-jA-X9g"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="leading" secondItem="eTo-Ip-reh" secondAttribute="trailing" id="I0s-Ze-pwV"/>
|
||||
<constraint firstAttribute="bottom" secondItem="bRc-5e-QAH" secondAttribute="bottom" constant="10" id="InL-Hk-twg"/>
|
||||
<constraint firstItem="UjQ-Cw-7wH" firstAttribute="leading" secondItem="ZAg-Me-yKR" secondAttribute="trailing" id="Jj4-jg-rdr"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" id="KQe-Ei-8jY"/>
|
||||
<constraint firstItem="cPl-47-rS8" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="Kw5-3R-qXs"/>
|
||||
<constraint firstItem="bRc-5e-QAH" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="MXG-vB-U8F"/>
|
||||
<constraint firstItem="ZAg-Me-yKR" firstAttribute="width" secondItem="N3w-qP-kRZ" secondAttribute="width" id="Mem-UJ-5Js"/>
|
||||
<constraint firstItem="L7g-lu-boa" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="OVT-GJ-zq8"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" constant="25" id="OYQ-8o-3j8"/>
|
||||
<constraint firstItem="N3w-qP-kRZ" firstAttribute="width" secondItem="cPl-47-rS8" secondAttribute="width" id="Pl6-Xd-Krq"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="width" secondItem="LNf-b4-GYP" secondAttribute="width" id="Pro-fg-wBA"/>
|
||||
<constraint firstAttribute="bottom" secondItem="6iC-Cl-RyI" secondAttribute="bottom" id="Q5M-8N-hIh"/>
|
||||
<constraint firstItem="UjQ-Cw-7wH" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="RGn-ja-FRD"/>
|
||||
<constraint firstAttribute="trailing" secondItem="LNf-b4-GYP" secondAttribute="trailing" constant="5" id="RlS-d5-rIx"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="trailing" secondItem="cPl-47-rS8" secondAttribute="leading" id="Rs4-Pl-R8X"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="leading" secondItem="bRc-5e-QAH" secondAttribute="trailing" id="SO9-U6-cVO"/>
|
||||
<constraint firstAttribute="bottom" secondItem="N3w-qP-kRZ" secondAttribute="bottom" id="STf-aE-Y2E"/>
|
||||
<constraint firstAttribute="bottom" secondItem="kwc-0w-V51" secondAttribute="bottom" constant="10" id="SWG-oy-aZJ"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="TAb-IV-m7A"/>
|
||||
<constraint firstAttribute="bottom" secondItem="cPl-47-rS8" secondAttribute="bottom" id="Tmp-md-564"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="height" secondItem="UjQ-Cw-7wH" secondAttribute="height" id="Uli-Qb-6Om"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" id="VcV-kz-XBb"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="width" secondItem="6iC-Cl-RyI" secondAttribute="width" id="X0k-jG-o63"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="leading" secondItem="eTo-Ip-reh" secondAttribute="trailing" id="cOc-P1-ZhU"/>
|
||||
<constraint firstItem="LNf-b4-GYP" firstAttribute="leading" secondItem="Wjb-tu-QEo" secondAttribute="trailing" id="dSr-cr-ebR"/>
|
||||
<constraint firstItem="EiN-2p-Oig" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="fgT-6k-CaP"/>
|
||||
<constraint firstItem="LNf-b4-GYP" firstAttribute="leading" secondItem="Wjb-tu-QEo" secondAttribute="trailing" id="gNl-wJ-ujY"/>
|
||||
<constraint firstItem="ZAg-Me-yKR" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="glN-lT-q1z"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="width" secondItem="Wjb-tu-QEo" secondAttribute="width" id="hEH-9C-pGZ"/>
|
||||
<constraint firstItem="EiN-2p-Oig" firstAttribute="height" secondItem="kwc-0w-V51" secondAttribute="height" id="hOI-fd-H7m"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="i5C-wG-rRN"/>
|
||||
<constraint firstItem="eTo-Ip-reh" firstAttribute="trailing" secondItem="dHj-rj-mjh" secondAttribute="leading" id="jsw-H6-2gQ"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" id="lQE-r9-9JT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="L7g-lu-boa" secondAttribute="bottom" constant="10" id="lv1-xB-0zR"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="leading" secondItem="N3w-qP-kRZ" secondAttribute="trailing" id="oQe-Qf-9ZO"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="pn7-s8-fDj"/>
|
||||
<constraint firstItem="EiN-2p-Oig" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" id="qIf-aB-2ZY"/>
|
||||
<constraint firstItem="6iC-Cl-RyI" firstAttribute="leading" secondItem="EiN-2p-Oig" secondAttribute="trailing" id="sAE-Nl-Puc"/>
|
||||
<constraint firstItem="LNf-b4-GYP" firstAttribute="leading" secondItem="L7g-lu-boa" secondAttribute="trailing" id="t1q-Nc-vbg"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" constant="10" id="tVL-uj-6Ma"/>
|
||||
<constraint firstItem="Wjb-tu-QEo" firstAttribute="trailing" secondItem="L7g-lu-boa" secondAttribute="leading" id="u3Q-pF-E3A"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Wjb-tu-QEo" secondAttribute="bottom" id="uh4-LM-Ieo"/>
|
||||
<constraint firstItem="kwc-0w-V51" firstAttribute="leading" secondItem="cPl-47-rS8" secondAttribute="trailing" constant="25" id="vrx-0B-GOB"/>
|
||||
<constraint firstAttribute="bottom" secondItem="eTo-Ip-reh" secondAttribute="bottom" id="xIu-Vy-Nff"/>
|
||||
<constraint firstItem="N3w-qP-kRZ" firstAttribute="leading" secondItem="UjQ-Cw-7wH" secondAttribute="trailing" id="xWy-Uf-QEm"/>
|
||||
<constraint firstItem="N3w-qP-kRZ" firstAttribute="leading" secondItem="ZAg-Me-yKR" secondAttribute="trailing" id="xsx-BM-yQ5"/>
|
||||
<constraint firstItem="N3w-qP-kRZ" firstAttribute="top" secondItem="Yr6-3E-keb" secondAttribute="top" id="yEX-Wv-CZQ"/>
|
||||
</constraints>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="67F-sV-r6W"/>
|
||||
<exclude reference="xWy-Uf-QEm"/>
|
||||
<exclude reference="1pQ-h0-SEG"/>
|
||||
<exclude reference="HQ2-jA-X9g"/>
|
||||
<exclude reference="OYQ-8o-3j8"/>
|
||||
<exclude reference="Rs4-Pl-R8X"/>
|
||||
<exclude reference="SWG-oy-aZJ"/>
|
||||
<exclude reference="TAb-IV-m7A"/>
|
||||
<exclude reference="Uli-Qb-6Om"/>
|
||||
<exclude reference="lQE-r9-9JT"/>
|
||||
<exclude reference="vrx-0B-GOB"/>
|
||||
<exclude reference="KQe-Ei-8jY"/>
|
||||
<exclude reference="sAE-Nl-Puc"/>
|
||||
<exclude reference="7Um-cV-f7p"/>
|
||||
<exclude reference="hOI-fd-H7m"/>
|
||||
<exclude reference="2UA-Ao-KZF"/>
|
||||
<exclude reference="SO9-U6-cVO"/>
|
||||
<exclude reference="6ZX-Ub-2vw"/>
|
||||
<exclude reference="cOc-P1-ZhU"/>
|
||||
<exclude reference="4dj-Xx-ksP"/>
|
||||
<exclude reference="DYn-Cd-g5H"/>
|
||||
<exclude reference="dSr-cr-ebR"/>
|
||||
<exclude reference="t1q-Nc-vbg"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</tableViewCellContentView>
|
||||
<connections>
|
||||
<outlet property="fridayButton" destination="Wjb-tu-QEo" id="AcP-Qg-i9P"/>
|
||||
<outlet property="mondayButton" destination="N3w-qP-kRZ" id="u3A-mt-EKd"/>
|
||||
<outlet property="saturdayButton" destination="LNf-b4-GYP" id="TeM-3b-B1Z"/>
|
||||
<outlet property="sundayButton" destination="ZAg-Me-yKR" id="GUI-ry-Hm1"/>
|
||||
<outlet property="thursdayButton" destination="eTo-Ip-reh" id="Dxi-hi-oBK"/>
|
||||
<outlet property="tuesdayButton" destination="cPl-47-rS8" id="wIn-mO-cUx"/>
|
||||
<outlet property="wednesdayButton" destination="6iC-Cl-RyI" id="GQe-Oy-pcd"/>
|
||||
</connections>
|
||||
<point key="canvasLocation" x="296" y="222"/>
|
||||
</tableViewCell>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -1,107 +0,0 @@
|
||||
//
|
||||
// DatesFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
NSString *const kDateInline = @"dateInline";
|
||||
NSString *const kTimeInline = @"timeInline";
|
||||
NSString *const kDateTimeInline = @"dateTimeInline";
|
||||
|
||||
NSString *const kDate = @"date";
|
||||
NSString *const kTime = @"time";
|
||||
NSString *const kDateTime = @"dateTime";
|
||||
|
||||
#import "DatesFormViewController.h"
|
||||
|
||||
|
||||
@implementation DatesFormViewController
|
||||
|
||||
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
XLFormDescriptor * form;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
form = [XLFormDescriptor formDescriptorWithTitle:@"Dates"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Inline Dates"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateInline rowType:XLFormRowDescriptorTypeDateInline title:@"Date"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// DateTime
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTimeInline rowType:XLFormRowDescriptorTypeTimeInline title:@"Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Time
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateTimeInline rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Date Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Dates"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDate rowType:XLFormRowDescriptorTypeDate title:@"Date"];
|
||||
row.value = [NSDate new];
|
||||
[row.cellConfigAtConfigure setObject:[NSDate new] forKey:@"minimumDate"];
|
||||
[row.cellConfigAtConfigure setObject:[NSDate dateWithTimeIntervalSinceNow:(60*60*24*3)] forKey:@"maximumDate"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// DateTime
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kTime rowType:XLFormRowDescriptorTypeTime title:@"Time"];
|
||||
[row.cellConfigAtConfigure setObject:@(10) forKey:@"minuteInterval"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Time
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDateTime rowType:XLFormRowDescriptorTypeDateTime title:@"Date Time"];
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Disabled Dates"];
|
||||
section.footerTitle = @"DatesFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
// Date
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDate rowType:XLFormRowDescriptorTypeDate title:@"Date"];
|
||||
row.disabled = YES;
|
||||
row.required = YES;
|
||||
row.value = [NSDate new];
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// XLFormCustomCell.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormBaseCell.h"
|
||||
|
||||
@interface XLFormCustomCell : XLFormBaseCell
|
||||
|
||||
@end
|
||||
@@ -1,108 +0,0 @@
|
||||
//
|
||||
// XLFormCustomCell.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormCustomCell.h"
|
||||
|
||||
@implementation XLFormCustomCell
|
||||
|
||||
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
|
||||
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
||||
if (self) {
|
||||
// Initialization code
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)configure
|
||||
{
|
||||
//override
|
||||
UIFont *labelFont = [UIFont preferredFontForTextStyle:UIFontTextStyleCaption1];
|
||||
UIFontDescriptor *fontDesc = [labelFont fontDescriptor];
|
||||
UIFontDescriptor *fontBoldDesc = [fontDesc fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
|
||||
self.textLabel.font = [UIFont fontWithDescriptor:fontBoldDesc size:0.0f];
|
||||
}
|
||||
|
||||
- (void)update
|
||||
{
|
||||
// override
|
||||
self.textLabel.text = @"Am a custom cell, select me!";
|
||||
}
|
||||
|
||||
-(void)formDescriptorCellDidSelectedWithFormController:(XLFormViewController *)controller
|
||||
{
|
||||
// custom code here
|
||||
// i.e new behaviour when cell has been selected
|
||||
self.textLabel.text = @"I can do any custom behaviour...";
|
||||
self.rowDescriptor.value = self.textLabel.text;
|
||||
}
|
||||
|
||||
/*
|
||||
+(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor
|
||||
{
|
||||
// return custom cell size
|
||||
return 40;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
-(BOOL)formDescriptorCellBecomeFirstResponder
|
||||
{
|
||||
// custom code
|
||||
return YES;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
-(NSError *)formDescriptorCellLocalValidation
|
||||
{
|
||||
// custom error handler
|
||||
// compare with a custom property if it should return a error
|
||||
// i.e some textfield is empty etc...
|
||||
if (self.rowDescriptor.required){
|
||||
return [[NSError alloc] initWithDomain:XLFormErrorDomain code:XLFormErrorCodeRequired userInfo:@{ NSLocalizedDescriptionKey: [NSString stringWithFormat:NSLocalizedString(@"%@ can't be empty", nil), self.rowDescriptor.title] }];
|
||||
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
-(NSString *)formDescriptorHttpParameterName
|
||||
{
|
||||
// custom code
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect
|
||||
{
|
||||
// Drawing code
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
||||
@@ -1,175 +0,0 @@
|
||||
//
|
||||
// OthersFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "MapViewController.h"
|
||||
#import "OthersFormViewController.h"
|
||||
#import "XLFormCustomCell.h"
|
||||
|
||||
NSString *const kSwitchBool = @"switchBool";
|
||||
NSString *const kSwitchCheck = @"switchBool";
|
||||
NSString *const kStepCounter = @"stepCounter";
|
||||
NSString *const kSlider = @"slider";
|
||||
NSString *const kSegmentedControl = @"segmentedControl";
|
||||
NSString *const kCustom = @"custom";
|
||||
NSString *const kInfo = @"info";
|
||||
NSString *const kButton = @"button";
|
||||
NSString *const kButtonLeftAligned = @"buttonLeftAligned";
|
||||
NSString *const kButtonWithSegueId = @"buttonWithSegueId";
|
||||
NSString *const kButtonWithSegueClass = @"buttonWithSegueClass";
|
||||
NSString *const kButtonWithNibName = @"buttonWithNibName";
|
||||
NSString *const kButtonWithStoryboardId = @"buttonWithStoryboardId";
|
||||
|
||||
|
||||
@implementation OthersFormViewController
|
||||
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
self = [super initWithCoder:coder];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Other Cells"];
|
||||
XLFormSectionDescriptor * section;
|
||||
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Other Cells"];
|
||||
section.footerTitle = @"OthersFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
// Switch
|
||||
[section addFormRow:[XLFormRowDescriptor formRowDescriptorWithTag:kSwitchBool rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"Switch"]];
|
||||
|
||||
// check
|
||||
[section addFormRow:[XLFormRowDescriptor formRowDescriptorWithTag:kSwitchCheck rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Check"]];
|
||||
|
||||
// step counter
|
||||
[section addFormRow:[XLFormRowDescriptor formRowDescriptorWithTag:kStepCounter rowType:XLFormRowDescriptorTypeStepCounter title:@"Step counter"]];
|
||||
|
||||
// Segmented Control
|
||||
XLFormRowDescriptor * row = [XLFormRowDescriptor formRowDescriptorWithTag:kSegmentedControl rowType:XLFormRowDescriptorTypeSelectorSegmentedControl title:@"Fruits"];
|
||||
row.selectorOptions = @[@"Apple", @"Orange", @"Pear"];
|
||||
row.value = @"Pear";
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// Slider
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSlider rowType:XLFormRowDescriptorTypeSlider title:@"Slider"];
|
||||
row.value = @(30);
|
||||
[row.cellConfigAtConfigure setObject:@(100) forKey:@"slider.maximumValue"];
|
||||
[row.cellConfigAtConfigure setObject:@(10) forKey:@"slider.minimumValue"];
|
||||
[row.cellConfigAtConfigure setObject:@(4) forKey:@"steps"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Custom cell
|
||||
XLFormRowDescriptor *customRowDescriptor = [XLFormRowDescriptor formRowDescriptorWithTag:kCustom rowType:@"XLFormRowDescriptorTypeCustom"];
|
||||
// Must set custom cell or add custom cell to cellClassesForRowDescriptorTypes dictionary before XLFormViewController loaded
|
||||
customRowDescriptor.cellClass = [XLFormCustomCell class];
|
||||
[section addFormRow:customRowDescriptor];
|
||||
|
||||
// Info cell
|
||||
XLFormRowDescriptor *infoRowDescriptor = [XLFormRowDescriptor formRowDescriptorWithTag:kInfo rowType:XLFormRowDescriptorTypeInfo];
|
||||
infoRowDescriptor.title = @"Version";
|
||||
infoRowDescriptor.value = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
[section addFormRow:infoRowDescriptor];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Buttons"];
|
||||
section.footerTitle = @"Blue buttons will show a message when Switch is ON";
|
||||
[form addFormSection:section];
|
||||
|
||||
// Button
|
||||
XLFormRowDescriptor * buttonRow = [XLFormRowDescriptor formRowDescriptorWithTag:kButton rowType:XLFormRowDescriptorTypeButton title:@"Button"];
|
||||
[buttonRow.cellConfig setObject:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] forKey:@"textLabel.textColor"];
|
||||
buttonRow.action.formSelector = @selector(didTouchButton:);
|
||||
[section addFormRow:buttonRow];
|
||||
|
||||
|
||||
// Left Button
|
||||
XLFormRowDescriptor * buttonLeftAlignedRow = [XLFormRowDescriptor formRowDescriptorWithTag:kButtonLeftAligned rowType:XLFormRowDescriptorTypeButton title:@"Button with Block"];
|
||||
[buttonLeftAlignedRow.cellConfig setObject:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] forKey:@"textLabel.textColor"];
|
||||
[buttonLeftAlignedRow.cellConfig setObject:@(NSTextAlignmentLeft) forKey:@"textLabel.textAlignment"];
|
||||
[buttonLeftAlignedRow.cellConfig setObject:@(UITableViewCellAccessoryDisclosureIndicator) forKey:@"accessoryType"];
|
||||
buttonLeftAlignedRow.action.formBlock = ^(XLFormRowDescriptor * sender){
|
||||
if ([[sender.sectionDescriptor.formDescriptor formRowWithTag:kSwitchBool].value boolValue]){
|
||||
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Switch is ON", nil) message:@"Button has checked the switch value..." delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
|
||||
[alertView show];
|
||||
}
|
||||
[self deselectFormRow:sender];
|
||||
};
|
||||
[section addFormRow:buttonLeftAlignedRow];
|
||||
|
||||
// Another Left Button with segue
|
||||
XLFormRowDescriptor * buttonLeftAlignedWithSegueRow = [XLFormRowDescriptor formRowDescriptorWithTag:kButtonWithSegueClass rowType:XLFormRowDescriptorTypeButton title:@"Button with Segue Class"];
|
||||
buttonLeftAlignedWithSegueRow.action.formSegueClass = NSClassFromString(@"UIStoryboardPushSegue");
|
||||
buttonLeftAlignedWithSegueRow.action.viewControllerClass = [MapViewController class];
|
||||
[section addFormRow:buttonLeftAlignedWithSegueRow];
|
||||
|
||||
|
||||
// Button with SegueId
|
||||
XLFormRowDescriptor * buttonWithSegueId = [XLFormRowDescriptor formRowDescriptorWithTag:kButtonWithSegueClass rowType:XLFormRowDescriptorTypeButton title:@"Button with Segue Idenfifier"];
|
||||
buttonWithSegueId.action.formSegueIdenfifier = @"MapViewControllerSegue";
|
||||
[section addFormRow:buttonWithSegueId];
|
||||
|
||||
|
||||
// Another Button using Segue
|
||||
XLFormRowDescriptor * buttonWithStoryboardId = [XLFormRowDescriptor formRowDescriptorWithTag:kButtonWithStoryboardId rowType:XLFormRowDescriptorTypeButton title:@"Button with StoryboardId"];
|
||||
buttonWithStoryboardId.action.viewControllerStoryboardId = @"MapViewController";
|
||||
[section addFormRow:buttonWithStoryboardId];
|
||||
|
||||
// Another Left Button with segue
|
||||
XLFormRowDescriptor * buttonWithNibName = [XLFormRowDescriptor formRowDescriptorWithTag:kButtonWithNibName
|
||||
rowType:XLFormRowDescriptorTypeButton
|
||||
title:@"Button with NibName"];
|
||||
buttonWithNibName.action.viewControllerNibName = @"MapViewController";
|
||||
[section addFormRow:buttonWithNibName];
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
|
||||
-(void)didTouchButton:(XLFormRowDescriptor *)sender
|
||||
{
|
||||
if ([[sender.sectionDescriptor.formDescriptor formRowWithTag:kSwitchBool].value boolValue]){
|
||||
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Switch is ON", nil) message:@"Button has checked the switch value..." delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
|
||||
[alertView show];
|
||||
}
|
||||
[self deselectFormRow:sender];
|
||||
}
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 23 KiB |
@@ -1,262 +0,0 @@
|
||||
//
|
||||
// NativeEventNavigationViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "NativeEventFormViewController.h"
|
||||
|
||||
@implementation NativeEventNavigationViewController
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super initWithRootViewController:[[NativeEventFormViewController alloc] init]];
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
[self.view setTintColor:[UIColor redColor]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface NativeEventFormViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation NativeEventFormViewController
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
self = [super initWithCoder:coder];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * form;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
form = [XLFormDescriptor formDescriptorWithTitle:@"Add Event"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Title
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"title" rowType:XLFormRowDescriptorTypeText];
|
||||
[row.cellConfigAtConfigure setObject:@"Title" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Location
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"location" rowType:XLFormRowDescriptorTypeText];
|
||||
[row.cellConfigAtConfigure setObject:@"Location" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// All-day
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"all-day" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"All-day"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Starts
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"starts" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Starts"];
|
||||
row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Ends
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"ends" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Ends"];
|
||||
row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*25];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Repeat
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"repeat" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Repeat"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Never"];
|
||||
row.selectorTitle = @"Repeat";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Never"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Every Day"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Every Week"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Every 2 Weeks"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Every Month"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(5) displayText:@"Every Year"],
|
||||
];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Alert
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"alert" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Alert"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"None"];
|
||||
row.selectorTitle = @"Event Alert";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"None"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"At time of event"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"5 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"15 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"30 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(5) displayText:@"1 hour before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(6) displayText:@"2 hours before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(7) displayText:@"1 day before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(8) displayText:@"2 days before"],
|
||||
];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Show As
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"showAs" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Show As"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Busy"];
|
||||
row.selectorTitle = @"Show As";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Busy"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Free"]];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// URL
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"url" rowType:XLFormRowDescriptorTypeURL];
|
||||
[row.cellConfigAtConfigure setObject:@"URL" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Notes
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"notes" rowType:XLFormRowDescriptorTypeTextView];
|
||||
[row.cellConfigAtConfigure setObject:@"Notes" forKey:@"textView.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
|
||||
-(void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelPressed:)];
|
||||
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePressed:)];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - XLFormDescriptorDelegate
|
||||
|
||||
-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
|
||||
{
|
||||
[super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];
|
||||
if ([rowDescriptor.tag isEqualToString:@"alert"]){
|
||||
if ([[rowDescriptor.value valueData] isEqualToNumber:@(0)] == NO && [[oldValue valueData] isEqualToNumber:@(0)]){
|
||||
|
||||
XLFormRowDescriptor * newRow = [rowDescriptor copy];
|
||||
[newRow setTag:@"secondAlert"];
|
||||
newRow.title = @"Second Alert";
|
||||
[self.form addFormRow:newRow afterRow:rowDescriptor];
|
||||
}
|
||||
else if ([[oldValue valueData] isEqualToNumber:@(0)] == NO && [[newValue valueData] isEqualToNumber:@(0)]){
|
||||
[self.form removeFormRowWithTag:@"secondAlert"];
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"all-day"]){
|
||||
XLFormDateCell * dateStartCell = (XLFormDateCell *)[[self.form formRowWithTag:@"starts"] cellForFormController:self];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[[self.form formRowWithTag:@"ends"] cellForFormController:self];
|
||||
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
|
||||
if ([[rowDescriptor.value valueData] boolValue] == YES){
|
||||
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
|
||||
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
|
||||
[dateStartCell setFormDatePickerMode:XLFormDateDatePickerModeDate];
|
||||
[dateEndCell setFormDatePickerMode:XLFormDateDatePickerModeDate];
|
||||
}
|
||||
else{
|
||||
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
|
||||
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
|
||||
[dateStartCell setFormDatePickerMode:XLFormDateDatePickerModeDateTime];
|
||||
[dateEndCell setFormDatePickerMode:XLFormDateDatePickerModeDateTime];
|
||||
}
|
||||
dateStartCell.dateFormatter = dateFormatter;
|
||||
dateEndCell.dateFormatter = dateFormatter;
|
||||
[dateStartCell update];
|
||||
[dateEndCell update];
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"starts"]){
|
||||
XLFormRowDescriptor * startDateDescriptor = [self.form formRowWithTag:@"starts"];
|
||||
XLFormRowDescriptor * endDateDescriptor = [self.form formRowWithTag:@"ends"];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[endDateDescriptor cellForFormController:self];
|
||||
if ([startDateDescriptor.value compare:endDateDescriptor.value] == NSOrderedDescending) {
|
||||
// startDateDescriptor is later than endDateDescriptor
|
||||
endDateDescriptor.value = [[NSDate alloc] initWithTimeInterval:(60*60*24) sinceDate:startDateDescriptor.value];
|
||||
[dateEndCell update];
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"ends"]){
|
||||
XLFormRowDescriptor * startDateDescriptor = [self.form formRowWithTag:@"starts"];
|
||||
XLFormRowDescriptor * endDateDescriptor = [self.form formRowWithTag:@"ends"];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[endDateDescriptor cellForFormController:self];
|
||||
if ([startDateDescriptor.value compare:endDateDescriptor.value] == NSOrderedDescending) {
|
||||
// startDateDescriptor is later than endDateDescriptor
|
||||
NSDictionary *strikeThroughAttribute = [NSDictionary dictionaryWithObject:@1
|
||||
forKey:NSStrikethroughStyleAttributeName];
|
||||
NSAttributedString* strikeThroughText = [[NSAttributedString alloc] initWithString:dateEndCell.detailTextLabel.text attributes:strikeThroughAttribute];
|
||||
dateEndCell.detailTextLabel.attributedText = strikeThroughText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-(IBAction)cancelPressed:(UIBarButtonItem * __unused)button
|
||||
{
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
|
||||
-(IBAction)savePressed:(UIBarButtonItem * __unused)button
|
||||
{
|
||||
NSArray * validationErrors = [self formValidationErrors];
|
||||
if (validationErrors.count > 0){
|
||||
[self showFormValidationError:[validationErrors firstObject]];
|
||||
return;
|
||||
}
|
||||
[self.tableView endEditing:YES];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// CustomSelectorsFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface CustomSelectorsFormViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,73 +0,0 @@
|
||||
//
|
||||
// CustomSelectorsFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <MapKit/MapKit.h>
|
||||
#import "CLLocationValueTrasformer.h"
|
||||
#import "MapViewController.h"
|
||||
|
||||
#import "CustomSelectorsFormViewController.h"
|
||||
|
||||
NSString *const kSelectorMap = @"selectorMap";
|
||||
NSString *const kSelectorMapPopover = @"selectorMapPopover";
|
||||
|
||||
@implementation CustomSelectorsFormViewController
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Custom Selectors"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
section.footerTitle = @"CustomSelectorsFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
// Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorMap rowType:XLFormRowDescriptorTypeSelectorPush title:@"Coordinate"];
|
||||
row.action.viewControllerClass = [MapViewController class];
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
|
||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
|
||||
// Selector PopOver
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorMapPopover rowType:XLFormRowDescriptorTypeSelectorPopover title:@"Coordinate PopOver"];
|
||||
row.action.viewControllerClass = [MapViewController class];
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
}
|
||||
|
||||
self.form = form;
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// CLLocationValueTrasformer.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface CLLocationValueTrasformer : NSValueTransformer
|
||||
|
||||
@end
|
||||
@@ -1,48 +0,0 @@
|
||||
//
|
||||
// CLLocationValueTrasformer.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <MapKit/MapKit.h>
|
||||
#import "CLLocationValueTrasformer.h"
|
||||
|
||||
@implementation CLLocationValueTrasformer
|
||||
|
||||
+ (Class)transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL)allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id)transformedValue:(id)value
|
||||
{
|
||||
if (!value) return nil;
|
||||
CLLocation * location = (CLLocation *)value;
|
||||
return [NSString stringWithFormat:@"%0.4f, %0.4f", location.coordinate.latitude, location.coordinate.longitude];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,32 +0,0 @@
|
||||
//
|
||||
// MapViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface MapViewController : UIViewController <XLFormRowDescriptorViewController>
|
||||
|
||||
@end
|
||||
@@ -1,108 +0,0 @@
|
||||
//
|
||||
// MapViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "UIView+XLFormAdditions.h"
|
||||
#import <MapKit/MapKit.h>
|
||||
|
||||
#import "MapViewController.h"
|
||||
|
||||
|
||||
@interface MapAnnotation : NSObject <MKAnnotation>
|
||||
@end
|
||||
|
||||
@implementation MapAnnotation
|
||||
@synthesize coordinate = _coordinate;
|
||||
-(void)setCoordinate:(CLLocationCoordinate2D)newCoordinate
|
||||
{
|
||||
_coordinate = newCoordinate;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface MapViewController () <MKMapViewDelegate>
|
||||
|
||||
@property (nonatomic) MKMapView * mapView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation MapViewController
|
||||
|
||||
@synthesize rowDescriptor = _rowDescriptor;
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
[self.view addSubview:self.mapView];
|
||||
self.mapView.delegate = self;
|
||||
if (self.rowDescriptor.value){
|
||||
[self.mapView setCenterCoordinate:((CLLocation *)self.rowDescriptor.value).coordinate];
|
||||
self.title = [NSString stringWithFormat:@"%0.4f, %0.4f", self.mapView.centerCoordinate.latitude, self.mapView.centerCoordinate.longitude];
|
||||
MapAnnotation *annotation = [[MapAnnotation alloc] init];
|
||||
annotation.coordinate = self.mapView.centerCoordinate;
|
||||
[self.mapView addAnnotation:annotation];
|
||||
}
|
||||
}
|
||||
|
||||
-(MKMapView *)mapView
|
||||
{
|
||||
if (_mapView) return _mapView;
|
||||
_mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
|
||||
_mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||||
return _mapView;
|
||||
}
|
||||
|
||||
#pragma mark - MKMapViewDelegate
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView
|
||||
viewForAnnotation:(id <MKAnnotation>)annotation {
|
||||
|
||||
MKPinAnnotationView *pinAnnotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
|
||||
reuseIdentifier:@"annotation"];
|
||||
pinAnnotationView.pinColor = MKPinAnnotationColorRed;
|
||||
pinAnnotationView.draggable = YES;
|
||||
pinAnnotationView.animatesDrop = YES;
|
||||
return pinAnnotationView;
|
||||
}
|
||||
|
||||
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view didChangeDragState:(MKAnnotationViewDragState)newState
|
||||
fromOldState:(MKAnnotationViewDragState)oldState
|
||||
{
|
||||
if (newState == MKAnnotationViewDragStateEnding){
|
||||
self.rowDescriptor.value = [[CLLocation alloc] initWithLatitude:view.annotation.coordinate.latitude longitude:view.annotation.coordinate.longitude];
|
||||
self.title = [NSString stringWithFormat:@"%0.4f, %0.4f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6254" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6247"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MapViewController">
|
||||
<connections>
|
||||
<outlet property="view" destination="iN0-l3-epB" id="O5R-PM-tsI"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
||||
|
Before Width: | Height: | Size: 1011 KiB |
@@ -1,31 +0,0 @@
|
||||
//
|
||||
// DynamicSelectorsFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface DynamicSelectorsFormViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,66 +0,0 @@
|
||||
//
|
||||
// DynamicSelectorsFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "UsersTableViewController.h"
|
||||
#import "DynamicSelectorsFormViewController.h"
|
||||
|
||||
NSString *const kSelectorUser = @"selectorUser";
|
||||
NSString *const kSelectorUserPopover = @"kSelectorUserPopover";
|
||||
|
||||
@implementation DynamicSelectorsFormViewController
|
||||
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Selectors"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Dynamic Selectors"];
|
||||
section.footerTitle = @"DynamicSelectorsFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
// Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorUser rowType:XLFormRowDescriptorTypeSelectorPush title:@"User"];
|
||||
row.action.viewControllerClass = [UsersTableViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
|
||||
// Selector PopOver
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorUserPopover rowType:XLFormRowDescriptorTypeSelectorPopover title:@"User Popover"];
|
||||
row.action.viewControllerClass = [UsersTableViewController class];
|
||||
[section addFormRow:row];
|
||||
}
|
||||
self.form = form;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,245 +0,0 @@
|
||||
//
|
||||
// UsersTableViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "UsersTableViewController.h"
|
||||
#import "UserLocalDataLoader.h"
|
||||
#import "UserRemoteDataLoader.h"
|
||||
#import "User+Additions.h"
|
||||
|
||||
// AFNetworking
|
||||
#import <AFNetworking/UIImageView+AFNetworking.h>
|
||||
|
||||
|
||||
@interface UserCell : UITableViewCell
|
||||
|
||||
@property (nonatomic) UIImageView * userImage;
|
||||
@property (nonatomic) UILabel * userName;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UserCell
|
||||
|
||||
@synthesize userImage = _userImage;
|
||||
@synthesize userName = _userName;
|
||||
|
||||
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
|
||||
{
|
||||
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
|
||||
if (self) {
|
||||
// Initialization code
|
||||
|
||||
[self.contentView addSubview:self.userImage];
|
||||
[self.contentView addSubview:self.userName];
|
||||
|
||||
[self.contentView addConstraints:[self layoutConstraints]];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
|
||||
{
|
||||
[super setSelected:selected animated:animated];
|
||||
|
||||
// Configure the view for the selected state
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Views
|
||||
|
||||
-(UIImageView *)userImage
|
||||
{
|
||||
if (_userImage) return _userImage;
|
||||
_userImage = [UIImageView new];
|
||||
[_userImage setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
_userImage.layer.masksToBounds = YES;
|
||||
_userImage.layer.cornerRadius = 10.0f;
|
||||
return _userImage;
|
||||
}
|
||||
|
||||
-(UILabel *)userName
|
||||
{
|
||||
if (_userName) return _userName;
|
||||
_userName = [UILabel new];
|
||||
[_userName setTranslatesAutoresizingMaskIntoConstraints:NO];
|
||||
_userName.font = [UIFont fontWithName:@"HelveticaNeue" size:15.f];
|
||||
|
||||
return _userName;
|
||||
}
|
||||
|
||||
#pragma mark - Layout Constraints
|
||||
|
||||
-(NSArray *)layoutConstraints{
|
||||
|
||||
NSMutableArray * result = [NSMutableArray array];
|
||||
|
||||
NSDictionary * views = @{ @"image": self.userImage,
|
||||
@"name": self.userName};
|
||||
|
||||
|
||||
NSDictionary *metrics = @{@"imgSize":@50.0,
|
||||
@"margin" :@12.0};
|
||||
|
||||
[result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(margin)-[image(imgSize)]-[name]"
|
||||
options:NSLayoutFormatAlignAllTop
|
||||
metrics:metrics
|
||||
views:views]];
|
||||
|
||||
[result addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(margin)-[image(imgSize)]"
|
||||
options:0
|
||||
metrics:metrics
|
||||
views:views]];
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface UsersTableViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation UsersTableViewController
|
||||
|
||||
@synthesize rowDescriptor = _rowDescriptor;
|
||||
@synthesize popoverController = __popoverController;
|
||||
|
||||
static NSString *const kCellIdentifier = @"CellIdentifier";
|
||||
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
[self initialize];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)initialize
|
||||
{
|
||||
// Enable the pagination
|
||||
self.loadingPagingEnabled = YES;
|
||||
|
||||
// Support Search Controller
|
||||
self.supportSearchController = YES;
|
||||
|
||||
[self setLocalDataLoader:[[UserLocalDataLoader alloc] init]];
|
||||
[self setRemoteDataLoader:[[UserRemoteDataLoader alloc] init]];
|
||||
|
||||
// Search
|
||||
[self setSearchLocalDataLoader:[[UserLocalDataLoader alloc] init]];
|
||||
[self setSearchRemoteDataLoader:[[UserRemoteDataLoader alloc] init]];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
|
||||
// SearchBar
|
||||
self.tableView.tableHeaderView = self.searchDisplayController.searchBar;
|
||||
|
||||
// register cells
|
||||
[self.searchDisplayController.searchResultsTableView registerClass:[UserCell class] forCellReuseIdentifier:kCellIdentifier];
|
||||
[self.tableView registerClass:[UserCell class] forCellReuseIdentifier:kCellIdentifier];
|
||||
|
||||
[self customizeAppearance];
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
UserCell *cell = (UserCell *) [tableView dequeueReusableCellWithIdentifier:kCellIdentifier forIndexPath:indexPath];;
|
||||
|
||||
User * user = nil;
|
||||
if (tableView == self.tableView){
|
||||
user = (User *)[self.localDataLoader objectAtIndexPath:indexPath];
|
||||
}
|
||||
else{
|
||||
user = (User *)[self.searchLocalDataLoader objectAtIndexPath:indexPath];
|
||||
}
|
||||
|
||||
cell.userName.text = user.userName;
|
||||
NSMutableURLRequest* imageRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:user.userImageURL]];
|
||||
[imageRequest setValue:@"image/*" forHTTPHeaderField:@"Accept"];
|
||||
__typeof__(cell) __weak weakCell = cell;
|
||||
[cell.userImage setImageWithURLRequest: imageRequest
|
||||
placeholderImage:[User defaultProfileImage]
|
||||
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
|
||||
if (image) {
|
||||
[weakCell.userImage setImage:image];
|
||||
}
|
||||
}
|
||||
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
|
||||
}];
|
||||
cell.accessoryType = [[self.rowDescriptor.value formValue] isEqual:user.userId] ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
return 73.0f;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
||||
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
User * user = nil;
|
||||
if (tableView == self.tableView){
|
||||
user = (User *)[self.localDataLoader objectAtIndexPath:indexPath];
|
||||
}
|
||||
else{
|
||||
user = (User *)[self.searchLocalDataLoader objectAtIndexPath:indexPath];
|
||||
}
|
||||
self.rowDescriptor.value = user;
|
||||
|
||||
if (self.popoverController){
|
||||
[self.popoverController dismissPopoverAnimated:YES];
|
||||
[self.popoverController.delegate popoverControllerDidDismissPopover:self.popoverController];
|
||||
}
|
||||
else if ([self.parentViewController isKindOfClass:[UINavigationController class]]){
|
||||
[self.navigationController popViewControllerAnimated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Helpers
|
||||
|
||||
-(void)customizeAppearance
|
||||
{
|
||||
[[self navigationItem] setTitle:@"Select a User"];
|
||||
|
||||
[self.tableView setBackgroundColor:[UIColor colorWithWhite:0.9 alpha:1.0]];
|
||||
[self.tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
|
||||
|
||||
[self.searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor colorWithWhite:0.9 alpha:1.0]];
|
||||
[self.searchDisplayController.searchResultsTableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 506 KiB |
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="5064" systemVersion="13C1021" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
|
||||
<entity name="User" representedClassName="User" syncable="YES">
|
||||
<attribute name="userId" optional="YES" attributeType="Integer 32" defaultValueString="0" syncable="YES"/>
|
||||
<attribute name="userImageURL" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="userName" optional="YES" attributeType="String" syncable="YES"/>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="User" positionX="-63" positionY="-18" width="128" height="88"/>
|
||||
</elements>
|
||||
</model>
|
||||
@@ -1,227 +0,0 @@
|
||||
//
|
||||
// CoreDataStore.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "CoreDataStore.h"
|
||||
|
||||
static NSString *const TBCoreDataModelFileName = @"Model";
|
||||
|
||||
@interface CoreDataStore ()
|
||||
|
||||
@property (strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
|
||||
@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
|
||||
|
||||
@property (strong, nonatomic) NSManagedObjectContext *mainQueueContext;
|
||||
@property (strong, nonatomic) NSManagedObjectContext *privateQueueContext;
|
||||
|
||||
@end
|
||||
|
||||
@implementation CoreDataStore
|
||||
|
||||
|
||||
+ (instancetype)defaultStore {
|
||||
static CoreDataStore *_defaultStore = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
_defaultStore = [[self alloc] init];
|
||||
});
|
||||
return _defaultStore;
|
||||
}
|
||||
|
||||
#pragma mark - Singleton Access
|
||||
|
||||
+ (NSManagedObjectContext *)mainQueueContext
|
||||
{
|
||||
return [[self defaultStore] mainQueueContext];
|
||||
}
|
||||
|
||||
+ (NSManagedObjectContext *)privateQueueContext
|
||||
{
|
||||
return [[self defaultStore] privateQueueContext];
|
||||
}
|
||||
|
||||
+(void)savePrivateQueueContext
|
||||
{
|
||||
NSError * error;
|
||||
[[self privateQueueContext] save:&error];
|
||||
NSAssert(!error, [error localizedDescription]);
|
||||
}
|
||||
|
||||
+ (void)saveMainQueueContext
|
||||
{
|
||||
NSError * error;
|
||||
[[self mainQueueContext] save:&error];
|
||||
NSAssert(!error, [error localizedDescription]);
|
||||
}
|
||||
|
||||
+ (NSManagedObjectID *)managedObjectIDFromString:(NSString *)managedObjectIDString
|
||||
{
|
||||
return [[[self defaultStore] persistentStoreCoordinator] managedObjectIDForURIRepresentation:[NSURL URLWithString:managedObjectIDString]];
|
||||
}
|
||||
|
||||
#pragma mark - Lifecycle
|
||||
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSavePrivateQueueContext:)name:NSManagedObjectContextDidSaveNotification object:[self privateQueueContext]];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSaveMainQueueContext:) name:NSManagedObjectContextDidSaveNotification object:[self mainQueueContext]];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
}
|
||||
|
||||
#pragma mark - Notifications
|
||||
|
||||
- (void)contextDidSavePrivateQueueContext:(NSNotification *)notification
|
||||
{
|
||||
@synchronized(self) {
|
||||
[self.mainQueueContext performBlock:^{
|
||||
for(NSManagedObject *object in [[notification userInfo] objectForKey:NSUpdatedObjectsKey]) {
|
||||
[[self.mainQueueContext objectWithID:[object objectID]] willAccessValueForKey:nil];
|
||||
}
|
||||
[self.mainQueueContext mergeChangesFromContextDidSaveNotification:notification];
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)contextDidSaveMainQueueContext:(NSNotification *)notification
|
||||
{
|
||||
@synchronized(self) {
|
||||
[self.privateQueueContext performBlock:^{
|
||||
[self.privateQueueContext mergeChangesFromContextDidSaveNotification:notification];
|
||||
}];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Getters
|
||||
|
||||
- (NSManagedObjectContext *)mainQueueContext
|
||||
{
|
||||
if (!_mainQueueContext) {
|
||||
_mainQueueContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
|
||||
_mainQueueContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
|
||||
}
|
||||
|
||||
return _mainQueueContext;
|
||||
}
|
||||
|
||||
- (NSManagedObjectContext *)privateQueueContext
|
||||
{
|
||||
if (!_privateQueueContext) {
|
||||
_privateQueueContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
|
||||
_privateQueueContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
|
||||
}
|
||||
|
||||
return _privateQueueContext;
|
||||
}
|
||||
|
||||
#pragma mark - Stack Setup
|
||||
|
||||
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
|
||||
{
|
||||
if (!_persistentStoreCoordinator) {
|
||||
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
|
||||
NSError *error = nil;
|
||||
|
||||
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self persistentStoreURL] options:[self persistentStoreOptions] error:&error]) {
|
||||
NSLog(@"Error adding persistent store. %@, %@", error, error.userInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return _persistentStoreCoordinator;
|
||||
}
|
||||
|
||||
- (NSManagedObjectModel *)managedObjectModel
|
||||
{
|
||||
if (!_managedObjectModel) {
|
||||
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:TBCoreDataModelFileName withExtension:@"momd"];
|
||||
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
|
||||
}
|
||||
|
||||
return _managedObjectModel;
|
||||
}
|
||||
|
||||
- (NSURL *)persistentStoreURL
|
||||
{
|
||||
return [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Model.sqlite"];
|
||||
}
|
||||
|
||||
- (NSDictionary *)persistentStoreOptions
|
||||
{
|
||||
return @{NSInferMappingModelAutomaticallyOption: @YES, NSMigratePersistentStoresAutomaticallyOption: @YES, NSSQLitePragmasOption: @{@"synchronous": @"OFF"}};
|
||||
}
|
||||
|
||||
#pragma mark - Application's Documents directory
|
||||
|
||||
// Returns the URL to the application's Documents directory.
|
||||
- (NSURL *)applicationDocumentsDirectory
|
||||
{
|
||||
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation NSManagedObject (Additions)
|
||||
|
||||
|
||||
+(instancetype)findFirstByAttribute:(NSString *)attribute withValue:(id)value inContext:(NSManagedObjectContext *)context
|
||||
{
|
||||
NSString * predicateStr = [NSString stringWithFormat:@"%@ = %%@", attribute];
|
||||
NSPredicate * searchByAttValue = [NSPredicate predicateWithFormat:predicateStr argumentArray:@[value]];
|
||||
NSFetchRequest * fetchRequest = [self fetchRequest];
|
||||
fetchRequest.predicate = searchByAttValue;
|
||||
fetchRequest.fetchLimit = 1;
|
||||
NSArray *result = [context executeFetchRequest:fetchRequest error:nil];
|
||||
return [result lastObject];
|
||||
}
|
||||
|
||||
+(NSFetchRequest*)fetchRequest
|
||||
{
|
||||
return [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass(self)];
|
||||
}
|
||||
|
||||
+(NSEntityDescription*)entityDescriptor:(NSManagedObjectContext *)context
|
||||
{
|
||||
return [NSEntityDescription entityForName:NSStringFromClass(self) inManagedObjectContext:context];
|
||||
}
|
||||
|
||||
+(instancetype)insert:(NSManagedObjectContext *)context
|
||||
{
|
||||
return [[NSManagedObject alloc] initWithEntity:[self entityDescriptor:context] insertIntoManagedObjectContext:context];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
//
|
||||
// User+Additions.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "User.h"
|
||||
|
||||
@interface User (Additions) <XLFormOptionObject>
|
||||
|
||||
+ (User *)createOrUpdateWithServiceResult:(NSDictionary *)data inContext:(NSManagedObjectContext *)context;
|
||||
|
||||
+ (UIImage *)defaultProfileImage;
|
||||
|
||||
+ (NSPredicate *)getPredicateBySearchInput:(NSString *)search;
|
||||
|
||||
+ (NSFetchRequest *)getFetchRequest;
|
||||
|
||||
+ (NSFetchRequest *)getFetchRequestBySearchInput:(NSString *)search;
|
||||
|
||||
@end
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// User+Additions.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
|
||||
#import "CoreDataStore.h"
|
||||
#import "User+Additions.h"
|
||||
|
||||
#define USER_ID @"id"
|
||||
#define USER_IMAGE_URL @"imageURL"
|
||||
#define USER_NAME @"name"
|
||||
|
||||
|
||||
@implementation User (Additions)
|
||||
|
||||
+ (User *)createOrUpdateWithServiceResult:(NSDictionary *)data inContext:(NSManagedObjectContext *)context;
|
||||
{
|
||||
User *user = [User findFirstByAttribute:@"userId" withValue:data[USER_ID] inContext:context];
|
||||
if (!user)
|
||||
{
|
||||
user = [User insert:context];
|
||||
}
|
||||
user.userId = data[USER_ID];
|
||||
user.userImageURL = data[USER_IMAGE_URL] ;
|
||||
user.userName = data[USER_NAME];
|
||||
return user;
|
||||
}
|
||||
|
||||
+ (UIImage *)defaultProfileImage
|
||||
{
|
||||
return [UIImage imageNamed:@"default-avatar"];
|
||||
}
|
||||
|
||||
+ (NSPredicate *)getPredicateBySearchInput:(NSString *)search {
|
||||
|
||||
if (search && ![search isEqualToString:@""]) {
|
||||
return [NSPredicate predicateWithFormat:@"userName CONTAINS[cd] %@" , search];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
+ (NSFetchRequest *)getFetchRequest {
|
||||
return [User getFetchRequestBySearchInput:nil];
|
||||
}
|
||||
|
||||
+ (NSFetchRequest *)getFetchRequestBySearchInput:(NSString *)search {
|
||||
NSFetchRequest * fetchRequest = [User fetchRequest];
|
||||
fetchRequest.predicate = [User getPredicateBySearchInput:search];
|
||||
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"userName" ascending:YES selector:@selector(caseInsensitiveCompare:)]];
|
||||
return fetchRequest;
|
||||
}
|
||||
|
||||
#pragma mark - XLFormOptionObject
|
||||
|
||||
-(NSString *)formDisplayText
|
||||
{
|
||||
return self.userName;
|
||||
}
|
||||
|
||||
-(id)formValue
|
||||
{
|
||||
return self.userId;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,36 +0,0 @@
|
||||
//
|
||||
// User.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
|
||||
@interface User : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSNumber * userId;
|
||||
@property (nonatomic, retain) NSString * userName;
|
||||
@property (nonatomic, retain) NSString * userImageURL;
|
||||
|
||||
@end
|
||||
@@ -1,35 +0,0 @@
|
||||
//
|
||||
// User.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "User.h"
|
||||
|
||||
|
||||
@implementation User
|
||||
|
||||
@dynamic userId;
|
||||
@dynamic userName;
|
||||
@dynamic userImageURL;
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// UserLocalDataLoader.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLLocalDataLoader.h"
|
||||
|
||||
@interface UserLocalDataLoader : XLLocalDataLoader
|
||||
|
||||
@end
|
||||
@@ -1,60 +0,0 @@
|
||||
//
|
||||
// UserLocalDataLoader.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "UserLocalDataLoader.h"
|
||||
#import "User+Additions.h"
|
||||
#import "CoreDataStore.h"
|
||||
|
||||
@implementation UserLocalDataLoader
|
||||
{
|
||||
NSString *_searchString;
|
||||
}
|
||||
|
||||
- (id)init {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
NSFetchedResultsController * fetchResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:[User getFetchRequest]
|
||||
managedObjectContext:[CoreDataStore mainQueueContext]
|
||||
sectionNameKeyPath:nil
|
||||
cacheName:nil];
|
||||
[self setFetchedResultsController:fetchResultController];
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)changeSearchString:(NSString *)searchString
|
||||
{
|
||||
_searchString = searchString;
|
||||
[self refreshPredicate];
|
||||
}
|
||||
|
||||
- (void)refreshPredicate
|
||||
{
|
||||
[self setPredicate:[User getPredicateBySearchInput:_searchString]];
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// UserRemoteDataLoader.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLRemoteDataLoader.h"
|
||||
|
||||
@interface UserRemoteDataLoader : XLRemoteDataLoader
|
||||
|
||||
@end
|
||||
@@ -1,107 +0,0 @@
|
||||
//
|
||||
// UserRemoteDataLoader.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
|
||||
#import "UserRemoteDataLoader.h"
|
||||
#import "HTTPSessionManager.h"
|
||||
#import "CoreDataStore.h"
|
||||
#import "User+Additions.h"
|
||||
|
||||
@implementation UserRemoteDataLoader
|
||||
|
||||
-(NSString *)URLString
|
||||
{
|
||||
return @"/mobile/users.json";
|
||||
}
|
||||
|
||||
-(NSDictionary *)parameters
|
||||
{
|
||||
NSString *filterParam = self.searchString ?: @"";
|
||||
return @{@"filter" : filterParam,
|
||||
@"offset" : @(self.offset),
|
||||
@"limit" : @(self.limit)};
|
||||
}
|
||||
|
||||
-(AFHTTPSessionManager *)sessionManager
|
||||
{
|
||||
return [HTTPSessionManager sharedClient];
|
||||
}
|
||||
|
||||
-(void)successulDataLoad {
|
||||
// change flags
|
||||
// [self fetchedData] contains the data coming from the server
|
||||
NSArray * itemsArray = [[self fetchedData] objectForKey:kXLRemoteDataLoaderDefaultKeyForNonDictionaryResponse];
|
||||
|
||||
// This flag indicates if there is more data to load
|
||||
_hasMoreToLoad = !((itemsArray.count == 0) || (itemsArray.count < _limit && itemsArray.count != 0));
|
||||
[[CoreDataStore privateQueueContext] performBlock:^{
|
||||
for (NSDictionary *item in itemsArray) {
|
||||
// Creates or updates the User and the user who created it with the data that came from the server
|
||||
[User createOrUpdateWithServiceResult:item[@"user"] inContext:[CoreDataStore privateQueueContext]];
|
||||
}
|
||||
[self removeOutdatedData:itemsArray inContext:[CoreDataStore privateQueueContext]];
|
||||
[CoreDataStore savePrivateQueueContext];
|
||||
}];
|
||||
[super successulDataLoad];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Auxiliary Functions
|
||||
|
||||
- (void)removeOutdatedData:(NSArray *)data inContext:(NSManagedObjectContext *)context
|
||||
{
|
||||
// First, remove older data
|
||||
NSFetchRequest * fetchRequest = [User getFetchRequestBySearchInput:self.searchString];
|
||||
|
||||
fetchRequest.fetchLimit = self.limit;
|
||||
fetchRequest.fetchOffset = self.offset;
|
||||
|
||||
NSError *error;
|
||||
NSArray * oldObjects = [context executeFetchRequest:fetchRequest error:&error];
|
||||
|
||||
NSArray * arrayToIterate = [oldObjects copy];
|
||||
|
||||
if (error) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"Error"
|
||||
message:error.localizedFailureReason ?: error.localizedDescription
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil, nil];
|
||||
[alertView show];
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
for (User *user in arrayToIterate)
|
||||
{
|
||||
NSArray *filteredArray = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"user.id == %@" argumentArray:@[user.userId]]];
|
||||
if (filteredArray.count == 0) {
|
||||
// This User no longer exists
|
||||
[context deleteObject:user];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,32 +0,0 @@
|
||||
//
|
||||
// HTTPSessionManager.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "AFHTTPSessionManager.h"
|
||||
|
||||
@interface HTTPSessionManager : AFHTTPSessionManager
|
||||
|
||||
+ (HTTPSessionManager *)sharedClient;
|
||||
|
||||
@end
|
||||
@@ -1,45 +0,0 @@
|
||||
//
|
||||
// HTTPSessionManager.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "HTTPSessionManager.h"
|
||||
|
||||
@implementation HTTPSessionManager
|
||||
|
||||
// Server Base URL
|
||||
static NSString * const APIBaseURLString = @"http://obscure-refuge-3149.herokuapp.com";
|
||||
|
||||
+ (instancetype)sharedClient {
|
||||
static HTTPSessionManager *_sharedClient = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
_sharedClient = [[HTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:APIBaseURLString]];
|
||||
[_sharedClient.reachabilityManager startMonitoring];
|
||||
_sharedClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
|
||||
});
|
||||
|
||||
return _sharedClient;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,395 +0,0 @@
|
||||
//
|
||||
// SelectorsFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <MapKit/MapKit.h>
|
||||
#import "CLLocationValueTrasformer.h"
|
||||
#import "MapViewController.h"
|
||||
#import "CustomSelectorsFormViewController.h"
|
||||
#import "DynamicSelectorsFormViewController.h"
|
||||
#import "SelectorsFormViewController.h"
|
||||
|
||||
NSString *const kSelectorPush = @"selectorPush";
|
||||
NSString *const kSelectorPopover = @"selectorPopover";
|
||||
NSString *const kSelectorActionSheet = @"selectorActionSheet";
|
||||
NSString *const kSelectorAlertView = @"selectorAlertView";
|
||||
NSString *const kSelectorLeftRight = @"selectorLeftRight";
|
||||
NSString *const kSelectorPushDisabled = @"selectorPushDisabled";
|
||||
NSString *const kSelectorActionSheetDisabled = @"selectorActionSheetDisabled";
|
||||
NSString *const kSelectorLeftRightDisabled = @"selectorLeftRightDisabled";
|
||||
NSString *const kSelectorPickerView = @"selectorPickerView";
|
||||
NSString *const kSelectorPickerViewInline = @"selectorPickerViewInline";
|
||||
NSString *const kMultipleSelector = @"multipleSelector";
|
||||
NSString *const kMultipleSelectorPopover = @"multipleSelectorPopover";
|
||||
NSString *const kDynamicSelectors = @"dynamicSelectors";
|
||||
NSString *const kCustomSelectors = @"customSelectors";
|
||||
NSString *const kPickerView = @"pickerView";
|
||||
NSString *const kSelectorWithSegueId = @"selectorWithSegueId";
|
||||
NSString *const kSelectorWithSegueClass = @"selectorWithSegueClass";
|
||||
NSString *const kSelectorWithNibName = @"selectorWithNibName";
|
||||
NSString *const kSelectorWithStoryboardId = @"selectorWithStoryboardId";
|
||||
|
||||
#pragma mark - NSValueTransformer
|
||||
|
||||
@interface NSArrayValueTrasformer : NSValueTransformer
|
||||
@end
|
||||
|
||||
@implementation NSArrayValueTrasformer
|
||||
|
||||
+ (Class)transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL)allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id)transformedValue:(id)value
|
||||
{
|
||||
if (!value) return nil;
|
||||
if ([value isKindOfClass:[NSArray class]]){
|
||||
NSArray * array = (NSArray *)value;
|
||||
return [NSString stringWithFormat:@"%@ Item%@", @(array.count), array.count > 1 ? @"s" : @""];
|
||||
}
|
||||
if ([value isKindOfClass:[NSString class]])
|
||||
{
|
||||
return [NSString stringWithFormat:@"%@ - ;) - Transformed", value];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@interface ISOLanguageCodesValueTranformer : NSValueTransformer
|
||||
@end
|
||||
|
||||
@implementation ISOLanguageCodesValueTranformer
|
||||
|
||||
+ (Class)transformedValueClass
|
||||
{
|
||||
return [NSString class];
|
||||
}
|
||||
|
||||
+ (BOOL)allowsReverseTransformation
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (id)transformedValue:(id)value
|
||||
{
|
||||
if (!value) return nil;
|
||||
if ([value isKindOfClass:[NSString class]]){
|
||||
return [[NSLocale currentLocale] displayNameForKey:NSLocaleLanguageCode value:value];
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
#pragma mark - SelectorsFormViewController
|
||||
|
||||
@implementation SelectorsFormViewController
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
self = [super initWithCoder:coder];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Selectors"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Selectors"];
|
||||
section.footerTitle = @"SelectorsFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
// Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPush rowType:XLFormRowDescriptorTypeSelectorPush title:@"Push"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Selector Popover
|
||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPopover rowType:XLFormRowDescriptorTypeSelectorPopover title:@"PopOver"];
|
||||
row.selectorOptions = @[@"Option 1", @"Option 2", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.value = @"Option 2";
|
||||
[section addFormRow:row];
|
||||
}
|
||||
|
||||
// Selector Action Sheet
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorActionSheet rowType:XLFormRowDescriptorTypeSelectorActionSheet title:@"Sheet"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
|
||||
// Selector Alert View
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorAlertView rowType:XLFormRowDescriptorTypeSelectorAlertView title:@"Alert View"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
// Selector Left Right
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorLeftRight rowType:XLFormRowDescriptorTypeSelectorLeftRight title:@"Left Right"];
|
||||
row.leftRightSelectorLeftOptionSelected = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
|
||||
NSArray * rightOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Right Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Right Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Right Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Right Option 5"]
|
||||
];
|
||||
|
||||
// create right selectors
|
||||
NSMutableArray * leftRightSelectorOptions = [[NSMutableArray alloc] init];
|
||||
NSMutableArray * mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:0];
|
||||
XLFormLeftRightSelectorOption * leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"] httpParameterKey:@"option_1" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:1];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"] httpParameterKey:@"option_2" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:2];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"] httpParameterKey:@"option_3" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:3];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"] httpParameterKey:@"option_4" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:4];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"] httpParameterKey:@"option_5" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
row.selectorOptions = leftRightSelectorOptions;
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"];
|
||||
[section addFormRow:row];
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPickerView rowType:XLFormRowDescriptorTypeSelectorPickerView title:@"Picker View"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
// --------- Fixed Controls
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Fixed Controls"];
|
||||
[form addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kPickerView rowType:XLFormRowDescriptorTypePicker];
|
||||
row.selectorOptions = @[@"Option 1", @"Option 2", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.value = @"Option 1";
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
// --------- Inline Selectors
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Inline Selectors"];
|
||||
[form addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultipleSelector rowType:XLFormRowDescriptorTypeSelectorPickerViewInline title:@"Inline Picker View"];
|
||||
row.selectorOptions = @[@"Option 1", @"Option 2", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.value = @"Option 6";
|
||||
[section addFormRow:row];
|
||||
|
||||
// --------- MultipleSelector
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Multiple Selectors"];
|
||||
[form addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultipleSelector rowType:XLFormRowDescriptorTypeMultipleSelector title:@"Multiple Selector"];
|
||||
row.selectorOptions = @[@"Option 1", @"Option 2", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.value = @[@"Option 1", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// Multiple selector with value tranformer
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultipleSelector rowType:XLFormRowDescriptorTypeMultipleSelector title:@"Multiple Selector"];
|
||||
row.selectorOptions = @[@"Option 1", @"Option 2", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.value = @[@"Option 1", @"Option 3", @"Option 4", @"Option 5", @"Option 6"];
|
||||
row.valueTransformer = [NSArrayValueTrasformer class];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// Language multiple selector
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultipleSelector rowType:XLFormRowDescriptorTypeMultipleSelector title:@"Multiple Selector"];
|
||||
row.selectorOptions = [NSLocale ISOLanguageCodes];
|
||||
row.selectorTitle = @"Languages";
|
||||
row.valueTransformer = [ISOLanguageCodesValueTranformer class];
|
||||
row.value = [NSLocale preferredLanguages];
|
||||
[section addFormRow:row];
|
||||
|
||||
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad){
|
||||
// Language multiple selector popover
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kMultipleSelectorPopover rowType:XLFormRowDescriptorTypeMultipleSelectorPopover title:@"Multiple Selector PopOver"];
|
||||
row.selectorOptions = [NSLocale ISOLanguageCodes];
|
||||
row.valueTransformer = [ISOLanguageCodesValueTranformer class];
|
||||
row.value = [NSLocale preferredLanguages];
|
||||
[section addFormRow:row];
|
||||
}
|
||||
|
||||
|
||||
// --------- Dynamic Selectors
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Dynamic Selectors"];
|
||||
[form addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kDynamicSelectors rowType:XLFormRowDescriptorTypeButton title:@"Dynamic Selectors"];
|
||||
row.action.viewControllerClass = [DynamicSelectorsFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
// --------- Custom Selectors
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Custom Selectors"];
|
||||
[form addFormSection:section];
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kCustomSelectors rowType:XLFormRowDescriptorTypeButton title:@"Custom Selectors"];
|
||||
row.action.viewControllerClass = [CustomSelectorsFormViewController class];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Disabled & Required Selectors"];
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
|
||||
// Disabled Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPushDisabled rowType:XLFormRowDescriptorTypeSelectorPush title:@"Push"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
// --------- Disabled Selector Action Sheet
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorActionSheetDisabled rowType:XLFormRowDescriptorTypeSelectorActionSheet title:@"Sheet"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
// --------- Disabled Selector Left Right
|
||||
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorLeftRightDisabled rowType:XLFormRowDescriptorTypeSelectorLeftRight title:@"Left Right"];
|
||||
row.leftRightSelectorLeftOptionSelected = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// --------- Selector definition types
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Selectors"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// selector with segue class
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorWithSegueClass rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector with Segue Class"];
|
||||
row.action.formSegueClass = NSClassFromString(@"UIStoryboardPushSegue");
|
||||
row.action.viewControllerClass = [MapViewController class];
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
|
||||
// selector with SegueId
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorWithSegueClass rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector with Segue Idenfifier"];
|
||||
row.action.formSegueIdenfifier = @"MapViewControllerSegue";
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
|
||||
// selector using StoryboardId
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorWithStoryboardId rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector with StoryboardId"];
|
||||
row.action.viewControllerStoryboardId = @"MapViewController";
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
|
||||
// selector with NibName
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorWithNibName rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector with NibName"];
|
||||
row.action.viewControllerNibName = @"MapViewController";
|
||||
row.valueTransformer = [CLLocationValueTrasformer class];
|
||||
row.value = [[CLLocation alloc] initWithLatitude:-33 longitude:-56];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
|
||||
|
||||
-(UIStoryboard *)storyboardForRow:(XLFormRowDescriptor *)formRow
|
||||
{
|
||||
return [UIStoryboard storyboardWithName:@"iPhoneStoryboard" bundle:nil];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,224 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6250" systemVersion="14A389" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="p4n-1v-pzo">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="hSO-iI-kK3">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="p4n-1v-pzo" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="SNt-hk-N3V">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="cUg-F9-RF7" kind="relationship" relationship="rootViewController" id="Dli-gX-3ei"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="jqF-cF-u4f" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="117" y="56"/>
|
||||
</scene>
|
||||
<!--Others Form View Controller-->
|
||||
<scene sceneID="dyJ-7m-RaD">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="OthersFormViewController" id="oQO-1z-ESS" customClass="OthersFormViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="oOp-1u-3hE"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="HPb-Nx-E1G"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="wpr-wE-9nj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Hf0-cB-ORN"/>
|
||||
<connections>
|
||||
<segue destination="WMh-VN-FWi" kind="push" identifier="MapViewControllerSegue" id="wAD-tS-AFZ"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="7YZ-ZR-X81" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1533" y="-233"/>
|
||||
</scene>
|
||||
<!--Native Event Form View Controller-->
|
||||
<scene sceneID="EjT-rm-U3h">
|
||||
<objects>
|
||||
<viewController id="vx5-lN-WwK" customClass="NativeEventFormViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="Fbw-im-bwR"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="QuR-kY-o5R"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="tun-QW-CGC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="JY7-WL-SnH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="JY7-WL-SnH" firstAttribute="leading" secondItem="tun-QW-CGC" secondAttribute="leading" id="bSe-SV-rx6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="JY7-WL-SnH" secondAttribute="trailing" id="jLI-68-pSq"/>
|
||||
<constraint firstItem="QuR-kY-o5R" firstAttribute="top" secondItem="JY7-WL-SnH" secondAttribute="bottom" id="lUW-qG-LqV"/>
|
||||
<constraint firstItem="JY7-WL-SnH" firstAttribute="top" secondItem="tun-QW-CGC" secondAttribute="top" id="tu2-ah-L2P"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Xti-ay-J1u"/>
|
||||
<connections>
|
||||
<outlet property="tableView" destination="JY7-WL-SnH" id="kPy-NX-IyW"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="zV0-mq-irv" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1120" y="-635"/>
|
||||
</scene>
|
||||
<!--Examples-->
|
||||
<scene sceneID="wf7-ha-lXx">
|
||||
<objects>
|
||||
<viewController automaticallyAdjustsScrollViewInsets="NO" id="cUg-F9-RF7" customClass="ExamplesFormViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="kOR-67-djF"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="0bE-2H-tqE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="PO9-pF-A7O">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Lxj-Sb-kC6">
|
||||
<rect key="frame" x="0.0" y="64" width="320" height="504"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="top" secondItem="kOR-67-djF" secondAttribute="bottom" id="PT1-Xo-3Ql"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Lxj-Sb-kC6" secondAttribute="trailing" id="brq-yF-WM8"/>
|
||||
<constraint firstItem="Lxj-Sb-kC6" firstAttribute="leading" secondItem="PO9-pF-A7O" secondAttribute="leading" id="d73-kq-kX4"/>
|
||||
<constraint firstItem="0bE-2H-tqE" firstAttribute="top" secondItem="Lxj-Sb-kC6" secondAttribute="bottom" id="ltM-g9-Dgm"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Examples" id="sEr-D1-cU5"/>
|
||||
<connections>
|
||||
<outlet property="tableView" destination="Lxj-Sb-kC6" id="IS5-OZ-KBo"/>
|
||||
<segue destination="oQO-1z-ESS" kind="push" identifier="OthersFormViewControllerSegue" id="ulP-FP-rk3"/>
|
||||
<segue destination="G68-Ra-1fb" kind="push" identifier="SelectorsFormViewControllerSegue" id="vhA-cV-A02"/>
|
||||
<segue destination="K9D-4c-9eZ" kind="modal" identifier="NativeEventNavigationViewControllerSegue" id="Iie-Js-Izx"/>
|
||||
<segue destination="Kiw-nF-jv7" kind="push" identifier="ValidationExamplesFormViewControllerSegue" id="VKe-Ir-Fiu"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="1V5-DZ-WfF" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="527" y="56"/>
|
||||
</scene>
|
||||
<!--Validation Examples-->
|
||||
<scene sceneID="z2I-Nk-y9W">
|
||||
<objects>
|
||||
<viewController id="Kiw-nF-jv7" customClass="ValidationExamplesFormViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="AG9-N9-2qp"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="xtJ-Wo-mhU"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="1Ol-Ra-Ysg">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="Fty-3j-BeF">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="xtJ-Wo-mhU" firstAttribute="top" secondItem="Fty-3j-BeF" secondAttribute="bottom" id="CbV-4f-RzP"/>
|
||||
<constraint firstItem="Fty-3j-BeF" firstAttribute="top" secondItem="AG9-N9-2qp" secondAttribute="bottom" constant="-64" id="Pdw-VG-qcc"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Fty-3j-BeF" secondAttribute="trailing" id="nPd-m1-CWF"/>
|
||||
<constraint firstItem="Fty-3j-BeF" firstAttribute="leading" secondItem="1Ol-Ra-Ysg" secondAttribute="leading" id="qUB-l2-4IG"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Validation Examples" id="apf-4a-VpV">
|
||||
<barButtonItem key="rightBarButtonItem" title="Validate" id="Thm-OY-hsk"/>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="tableView" destination="Fty-3j-BeF" id="Rck-sk-OHi"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="VFT-Og-STO" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="527" y="789"/>
|
||||
</scene>
|
||||
<!--Selectors Form View Controller-->
|
||||
<scene sceneID="KYK-TX-8rm">
|
||||
<objects>
|
||||
<viewController id="G68-Ra-1fb" customClass="SelectorsFormViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="Z21-Qr-DQ8"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="CTu-Y5-7Qw"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="bNj-SD-83w">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="Buo-Af-6Q1"/>
|
||||
<connections>
|
||||
<segue destination="WMh-VN-FWi" kind="push" identifier="MapViewControllerSegue" id="Mtw-x2-E0b"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="8fu-YK-6qz" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1346" y="533"/>
|
||||
</scene>
|
||||
<!--Map View Controller-->
|
||||
<scene sceneID="tAS-lK-35t">
|
||||
<objects>
|
||||
<viewController storyboardIdentifier="MapViewController" id="WMh-VN-FWi" customClass="MapViewController" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="9jO-04-Lp1"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="cgQ-Vs-ICN"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="JjC-E5-SyY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="BjG-Bq-0lD"/>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="LmS-YR-mFY" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1789" y="533"/>
|
||||
</scene>
|
||||
<!--Native Event Navigation View Controller-->
|
||||
<scene sceneID="mNb-be-ApA">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="K9D-4c-9eZ" customClass="NativeEventNavigationViewController" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="fO3-V7-XXu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="vx5-lN-WwK" kind="relationship" relationship="rootViewController" id="gie-et-cUW"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="eqB-vl-BzH" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="588" y="-635"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||
</simulatedMetricsContainer>
|
||||
<inferredMetricsTieBreakers>
|
||||
<segue reference="wAD-tS-AFZ"/>
|
||||
</inferredMetricsTieBreakers>
|
||||
</document>
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// UICustomizationFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface UICustomizationFormViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,90 +0,0 @@
|
||||
//
|
||||
// UICustomizationFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "UICustomizationFormViewController.h"
|
||||
|
||||
@implementation UICustomizationFormViewController
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"UI Customization"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
|
||||
// Section
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Name
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"Name" rowType:XLFormRowDescriptorTypeText title:@"Name"];
|
||||
// change the background color
|
||||
[row.cellConfigAtConfigure setObject:[UIColor greenColor] forKey:@"backgroundColor"];
|
||||
// font
|
||||
[row.cellConfig setObject:[UIFont fontWithName:@"Helvetica" size:30] forKey:@"textLabel.font"];
|
||||
// background color
|
||||
[row.cellConfig setObject:[UIColor grayColor] forKey:@"textField.backgroundColor"];
|
||||
// font
|
||||
[row.cellConfig setObject:[UIFont fontWithName:@"Helvetica" size:25] forKey:@"textField.font"];
|
||||
// alignment
|
||||
[row.cellConfig setObject:@(NSTextAlignmentRight) forKey:@"textField.textAlignment"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// Section
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
//Button
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"Button" rowType:XLFormRowDescriptorTypeButton title:@"Button"];
|
||||
[row.cellConfigAtConfigure setObject:[UIColor purpleColor] forKey:@"backgroundColor"];
|
||||
[row.cellConfig setObject:[UIColor whiteColor] forKey:@"textLabel.color"];
|
||||
[row.cellConfig setObject:[UIFont fontWithName:@"Helvetica" size:40] forKey:@"textLabel.font"];
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = form;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
// change cell height of a particular cell
|
||||
if ([[self.form formRowAtIndex:indexPath].tag isEqualToString:@"Name"]){
|
||||
return 60.0;
|
||||
}
|
||||
else if ([[self.form formRowAtIndex:indexPath].tag isEqualToString:@"Button"]){
|
||||
return 100.0;
|
||||
}
|
||||
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,30 +0,0 @@
|
||||
//
|
||||
// ValidationExamplesFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormViewController.h"
|
||||
|
||||
@interface ValidationExamplesFormViewController : XLFormViewController
|
||||
|
||||
@end
|
||||
@@ -1,164 +0,0 @@
|
||||
//
|
||||
// ValidationExamplesFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "ValidationExamplesFormViewController.h"
|
||||
|
||||
@interface ValidationExamplesFormViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation ValidationExamplesFormViewController
|
||||
|
||||
NSString * const kValidationName = @"kName";
|
||||
NSString * const kValidationEmail = @"kEmail";
|
||||
NSString * const kValidationPassword = @"kPassword";
|
||||
NSString * const kValidationInteger = @"kInteger";
|
||||
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)coder
|
||||
{
|
||||
self = [super initWithCoder:coder];
|
||||
if (self) {
|
||||
[self initializeForm];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
-(void)initializeForm
|
||||
{
|
||||
XLFormDescriptor * formDescriptor = [XLFormDescriptor formDescriptorWithTitle:@"Text Fields"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Name Section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Validation Required"];
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// Name
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kValidationName rowType:XLFormRowDescriptorTypeText title:@"Name"];
|
||||
[row.cellConfigAtConfigure setObject:@"Required..." forKey:@"textField.placeholder"];
|
||||
[row.cellConfigAtConfigure setObject:@(NSTextAlignmentRight) forKey:@"textField.textAlignment"];
|
||||
row.required = YES;
|
||||
row.value = @"Martin";
|
||||
[section addFormRow:row];
|
||||
|
||||
// Email Section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Validation Email"];
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// Email
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kValidationEmail rowType:XLFormRowDescriptorTypeText title:@"Email"];
|
||||
[row.cellConfigAtConfigure setObject:@(NSTextAlignmentRight) forKey:@"textField.textAlignment"];
|
||||
row.required = NO;
|
||||
row.value = @"not valid email";
|
||||
[row addValidator:[XLFormValidator emailValidator]];
|
||||
[section addFormRow:row];
|
||||
|
||||
// password Section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Validation Password"];
|
||||
section.footerTitle = @"between 6 and 32 charachers, 1 alphanumeric and 1 numeric";
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// Password
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kValidationPassword rowType:XLFormRowDescriptorTypePassword title:@"Password"];
|
||||
[row.cellConfigAtConfigure setObject:@"Required..." forKey:@"textField.placeholder"];
|
||||
[row.cellConfigAtConfigure setObject:@(NSTextAlignmentRight) forKey:@"textField.textAlignment"];
|
||||
row.required = YES;
|
||||
[row addValidator:[XLFormRegexValidator formRegexValidatorWithMsg:@"At least 6, max 32 characters" regex:@"^(?=.*\\d)(?=.*[A-Za-z]).{6,32}$"]];
|
||||
[section addFormRow:row];
|
||||
|
||||
// number Section
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Validation Numbers"];
|
||||
section.footerTitle = @"grather than 50 and less than 100";
|
||||
[formDescriptor addFormSection:section];
|
||||
|
||||
// Integer
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kValidationInteger rowType:XLFormRowDescriptorTypeInteger title:@"Integer"];
|
||||
[row.cellConfigAtConfigure setObject:@"Required..." forKey:@"textField.placeholder"];
|
||||
[row.cellConfigAtConfigure setObject:@(NSTextAlignmentRight) forKey:@"textField.textAlignment"];
|
||||
row.required = YES;
|
||||
[row addValidator:[XLFormRegexValidator formRegexValidatorWithMsg:@"grather than 50 and less than 100" regex:@"^([5-9][0-9]|100)$"]];
|
||||
[section addFormRow:row];
|
||||
|
||||
self.form = formDescriptor;
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
[self.navigationItem.rightBarButtonItem setTarget:self];
|
||||
[self.navigationItem.rightBarButtonItem setAction:@selector(validateForm:)];
|
||||
}
|
||||
|
||||
#pragma mark - actions
|
||||
|
||||
-(void)validateForm:(UIBarButtonItem *)buttonItem
|
||||
{
|
||||
NSArray * array = [self formValidationErrors];
|
||||
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||
XLFormValidationStatus * validationStatus = [[obj userInfo] objectForKey:XLValidationStatusErrorKey];
|
||||
if ([validationStatus.rowDescriptor.tag isEqualToString:kValidationName]){
|
||||
UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:[self.form indexPathOfFormRow:validationStatus.rowDescriptor]];
|
||||
cell.backgroundColor = [UIColor orangeColor];
|
||||
[UIView animateWithDuration:0.3 animations:^{
|
||||
cell.backgroundColor = [UIColor whiteColor];
|
||||
}];
|
||||
}
|
||||
else if ([validationStatus.rowDescriptor.tag isEqualToString:kValidationEmail]){
|
||||
UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:[self.form indexPathOfFormRow:validationStatus.rowDescriptor]];
|
||||
[self animateCell:cell];
|
||||
}
|
||||
else if ([validationStatus.rowDescriptor.tag isEqualToString:kValidationPassword]){
|
||||
UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:[self.form indexPathOfFormRow:validationStatus.rowDescriptor]];
|
||||
[self animateCell:cell];
|
||||
}
|
||||
else if ([validationStatus.rowDescriptor.tag isEqualToString:kValidationInteger]){
|
||||
UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:[self.form indexPathOfFormRow:validationStatus.rowDescriptor]];
|
||||
[self animateCell:cell];
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Helper
|
||||
|
||||
-(void)animateCell:(UITableViewCell *)cell
|
||||
{
|
||||
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
|
||||
animation.keyPath = @"position.x";
|
||||
animation.values = @[ @0, @20, @-20, @10, @0];
|
||||
animation.keyTimes = @[@0, @(1 / 6.0), @(3 / 6.0), @(5 / 6.0), @1];
|
||||
animation.duration = 0.3;
|
||||
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
|
||||
animation.additive = YES;
|
||||
|
||||
[cell.layer addAnimation:animation forKey:@"shake"];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@@ -1,10 +0,0 @@
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
platform :ios, '7.0'
|
||||
|
||||
pod 'XLForm', :path => '../../'
|
||||
|
||||
#Following pods are used for custom row examples
|
||||
pod 'AFNetworking', '~> 2.0', :inhibit_warnings => true
|
||||
pod 'XLDataLoader', '~> 1.1', :inhibit_warnings => true
|
||||
pod 'JVFloatLabeledTextField', '1.0.2', :inhibit_warnings => true
|
||||
pod 'AXRatingView', '1.0.3', :inhibit_warnings => true
|
||||
@@ -1,47 +0,0 @@
|
||||
PODS:
|
||||
- AFNetworking (2.4.1):
|
||||
- AFNetworking/NSURLConnection (= 2.4.1)
|
||||
- AFNetworking/NSURLSession (= 2.4.1)
|
||||
- AFNetworking/Reachability (= 2.4.1)
|
||||
- AFNetworking/Security (= 2.4.1)
|
||||
- AFNetworking/Serialization (= 2.4.1)
|
||||
- AFNetworking/UIKit (= 2.4.1)
|
||||
- AFNetworking/NSURLConnection (2.4.1):
|
||||
- AFNetworking/Reachability
|
||||
- AFNetworking/Security
|
||||
- AFNetworking/Serialization
|
||||
- AFNetworking/NSURLSession (2.4.1):
|
||||
- AFNetworking/Reachability
|
||||
- AFNetworking/Security
|
||||
- AFNetworking/Serialization
|
||||
- AFNetworking/Reachability (2.4.1)
|
||||
- AFNetworking/Security (2.4.1)
|
||||
- AFNetworking/Serialization (2.4.1)
|
||||
- AFNetworking/UIKit (2.4.1):
|
||||
- AFNetworking/NSURLConnection
|
||||
- AFNetworking/NSURLSession
|
||||
- AXRatingView (1.0.3)
|
||||
- JVFloatLabeledTextField (1.0.2)
|
||||
- XLDataLoader (1.1.0):
|
||||
- AFNetworking (~> 2.0)
|
||||
- XLForm (2.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- AFNetworking (~> 2.0)
|
||||
- AXRatingView (= 1.0.3)
|
||||
- JVFloatLabeledTextField (= 1.0.2)
|
||||
- XLDataLoader (~> 1.1)
|
||||
- XLForm (from `../../`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
XLForm:
|
||||
:path: ../../
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
AFNetworking: 0aabc6fae66d6e5d039eeb21c315843c7aae51ab
|
||||
AXRatingView: 4f6d6c96f6d0efc1deaa6cf493dbb1ffcfa79e55
|
||||
JVFloatLabeledTextField: c1ad6b4b5bd77115cfe6c71ba4c023866df5c4cf
|
||||
XLDataLoader: bd783ebe782932a6390ffc7619fcd884c8600944
|
||||
XLForm: c87bc94f769f52ce32793282d72d2fb15d0d5638
|
||||
|
||||
COCOAPODS: 0.35.0
|
||||
@@ -1,774 +0,0 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
281E5BE919538F4A006D93C5 /* CLLocationValueTrasformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 281E5BE819538F4A006D93C5 /* CLLocationValueTrasformer.m */; };
|
||||
282EB27C1AB5FF33004A736F /* AccessoryViewFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 282EB27B1AB5FF33004A736F /* AccessoryViewFormViewController.m */; };
|
||||
283B59B219532415000828CD /* MapViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 283B59B119532415000828CD /* MapViewController.m */; };
|
||||
283B59B7195334AF000828CD /* CustomSelectorsFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 283B59B6195334AF000828CD /* CustomSelectorsFormViewController.m */; };
|
||||
283C6B7D1999BAF100A5283D /* UICustomizationFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 283C6B7C1999BAF100A5283D /* UICustomizationFormViewController.m */; };
|
||||
2843EB4718D4915800F13E2B /* ExamplesFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2843EB4618D4915800F13E2B /* ExamplesFormViewController.m */; };
|
||||
2843EB4B18D496F600F13E2B /* SelectorsFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2843EB4A18D496F600F13E2B /* SelectorsFormViewController.m */; };
|
||||
2843EB5218D4CFC700F13E2B /* OthersFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2843EB5118D4CFC700F13E2B /* OthersFormViewController.m */; };
|
||||
2843EB5618D4F7B700F13E2B /* DatesFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2843EB5518D4F7B700F13E2B /* DatesFormViewController.m */; };
|
||||
28468E9818EC686500DBB015 /* NativeEventFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28468E9718EC686500DBB015 /* NativeEventFormViewController.m */; };
|
||||
28468EA418EF41D300DBB015 /* InputsFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28468EA318EF41D300DBB015 /* InputsFormViewController.m */; };
|
||||
28468EA718EF594900DBB015 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 28468EA518EF594800DBB015 /* Localizable.strings */; };
|
||||
2850C5FC18D0F706002B7D0A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2850C5FB18D0F706002B7D0A /* Foundation.framework */; };
|
||||
2850C5FE18D0F706002B7D0A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2850C5FD18D0F706002B7D0A /* CoreGraphics.framework */; };
|
||||
2850C60018D0F706002B7D0A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2850C5FF18D0F706002B7D0A /* UIKit.framework */; };
|
||||
2850C60618D0F706002B7D0A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2850C60418D0F706002B7D0A /* InfoPlist.strings */; };
|
||||
2850C60818D0F706002B7D0A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2850C60718D0F706002B7D0A /* main.m */; };
|
||||
28815E2E1A8589F600B674D2 /* MapViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28815E2D1A8589F600B674D2 /* MapViewController.xib */; };
|
||||
28A7661F193248BD00D69546 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28A7661E193248BD00D69546 /* CoreData.framework */; };
|
||||
28A76625193251E500D69546 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A76624193251E500D69546 /* AppDelegate.m */; };
|
||||
28A7662E1932E98A00D69546 /* HTTPSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A7662D1932E98A00D69546 /* HTTPSessionManager.m */; };
|
||||
28A7663B1932EA1F00D69546 /* UserLocalDataLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A766361932EA1F00D69546 /* UserLocalDataLoader.m */; };
|
||||
28A7663C1932EA1F00D69546 /* UserRemoteDataLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A766381932EA1F00D69546 /* UserRemoteDataLoader.m */; };
|
||||
28A766451932EC9C00D69546 /* CoreDataStore.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A766401932EC9C00D69546 /* CoreDataStore.m */; };
|
||||
28A766461932EC9C00D69546 /* User+Additions.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A766421932EC9C00D69546 /* User+Additions.m */; };
|
||||
28A7664A1932ED3400D69546 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 28A766481932ED3400D69546 /* Model.xcdatamodeld */; };
|
||||
28A7664D1932EE0B00D69546 /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A7664C1932EE0B00D69546 /* User.m */; };
|
||||
28A766551932F22400D69546 /* UsersTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A766541932F22400D69546 /* UsersTableViewController.m */; };
|
||||
28A7665E1932F61100D69546 /* DynamicSelectorsFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A7665D1932F61100D69546 /* DynamicSelectorsFormViewController.m */; };
|
||||
28A8083E190D9083009D77F8 /* iPhoneStoryboard.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 28A8083D190D9083009D77F8 /* iPhoneStoryboard.storyboard */; };
|
||||
28A85D5918E346C100E81A26 /* XLFormImageSelectorCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 28A85D5818E346C100E81A26 /* XLFormImageSelectorCell.m */; };
|
||||
28DBB04118D76FDC00FB8A8B /* MultivaluedFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28DBB04018D76FDC00FB8A8B /* MultivaluedFormViewController.m */; };
|
||||
28F89F2E1AA4EA5600E90218 /* ValidationExamplesFormViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28F89F2D1AA4EA5600E90218 /* ValidationExamplesFormViewController.m */; };
|
||||
2CA9A3FC06E94345A2FDE415 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DF43B7BBF44F72A4493E8E /* libPods.a */; };
|
||||
3C0357F01AB0D82300200C8A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3C0357EF1AB0D82300200C8A /* Images.xcassets */; };
|
||||
3C3B01D51AB741EF0027CD45 /* XLFormRatingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3B01D31AB741EF0027CD45 /* XLFormRatingCell.m */; };
|
||||
3C3B01D61AB741EF0027CD45 /* XLFormRatingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3C3B01D41AB741EF0027CD45 /* XLFormRatingCell.xib */; };
|
||||
3C3B01DA1AB7497D0027CD45 /* XLFormWeekDaysCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3B01D81AB7497D0027CD45 /* XLFormWeekDaysCell.m */; };
|
||||
3C3B01DB1AB7497D0027CD45 /* XLFormWeekDaysCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3C3B01D91AB7497D0027CD45 /* XLFormWeekDaysCell.xib */; };
|
||||
3C3B01E21AB7499A0027CD45 /* XLRatingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3B01E01AB7499A0027CD45 /* XLRatingView.m */; };
|
||||
3C3B01F01AB74BDC0027CD45 /* FloatLabeledTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3B01EF1AB74BDC0027CD45 /* FloatLabeledTextFieldCell.m */; };
|
||||
3CDAFC7A1AB0AFA4000F75B6 /* CustomRowsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDAFC791AB0AFA4000F75B6 /* CustomRowsViewController.m */; };
|
||||
D51B8B2C19126664008C0478 /* XLFormCustomCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D51B8B2B19126664008C0478 /* XLFormCustomCell.m */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
281E5BE719538F4A006D93C5 /* CLLocationValueTrasformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CLLocationValueTrasformer.h; path = Examples/Selectors/CustomSelectors/XLFormRowViewController/CLLocationValueTrasformer.h; sourceTree = "<group>"; };
|
||||
281E5BE819538F4A006D93C5 /* CLLocationValueTrasformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CLLocationValueTrasformer.m; path = Examples/Selectors/CustomSelectors/XLFormRowViewController/CLLocationValueTrasformer.m; sourceTree = "<group>"; };
|
||||
282EB27A1AB5FF33004A736F /* AccessoryViewFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AccessoryViewFormViewController.h; path = AccessoryViews/AccessoryViewFormViewController.h; sourceTree = "<group>"; };
|
||||
282EB27B1AB5FF33004A736F /* AccessoryViewFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AccessoryViewFormViewController.m; path = AccessoryViews/AccessoryViewFormViewController.m; sourceTree = "<group>"; };
|
||||
283B59B019532415000828CD /* MapViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MapViewController.h; path = Examples/Selectors/CustomSelectors/XLFormRowViewController/MapViewController.h; sourceTree = "<group>"; };
|
||||
283B59B119532415000828CD /* MapViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MapViewController.m; path = Examples/Selectors/CustomSelectors/XLFormRowViewController/MapViewController.m; sourceTree = "<group>"; };
|
||||
283B59B5195334AF000828CD /* CustomSelectorsFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomSelectorsFormViewController.h; path = Examples/Selectors/CustomSelectors/CustomSelectorsFormViewController.h; sourceTree = "<group>"; };
|
||||
283B59B6195334AF000828CD /* CustomSelectorsFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomSelectorsFormViewController.m; path = Examples/Selectors/CustomSelectors/CustomSelectorsFormViewController.m; sourceTree = "<group>"; };
|
||||
283C6B7B1999BAF100A5283D /* UICustomizationFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UICustomizationFormViewController.h; path = Examples/UICustomization/UICustomizationFormViewController.h; sourceTree = "<group>"; };
|
||||
283C6B7C1999BAF100A5283D /* UICustomizationFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UICustomizationFormViewController.m; path = Examples/UICustomization/UICustomizationFormViewController.m; sourceTree = "<group>"; };
|
||||
2843EB4518D4915800F13E2B /* ExamplesFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = ExamplesFormViewController.h; path = Examples/ExamplesFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
2843EB4618D4915800F13E2B /* ExamplesFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = ExamplesFormViewController.m; path = Examples/ExamplesFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
2843EB4918D496F600F13E2B /* SelectorsFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = SelectorsFormViewController.h; path = Examples/Selectors/SelectorsFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
2843EB4A18D496F600F13E2B /* SelectorsFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = SelectorsFormViewController.m; path = Examples/Selectors/SelectorsFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
2843EB5018D4CFC700F13E2B /* OthersFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = OthersFormViewController.h; path = Examples/Others/OthersFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
2843EB5118D4CFC700F13E2B /* OthersFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = OthersFormViewController.m; path = Examples/Others/OthersFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
2843EB5418D4F7B700F13E2B /* DatesFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = DatesFormViewController.h; path = Examples/Dates/DatesFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
2843EB5518D4F7B700F13E2B /* DatesFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = DatesFormViewController.m; path = Examples/Dates/DatesFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
28468E9618EC686500DBB015 /* NativeEventFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = NativeEventFormViewController.h; path = Examples/RealExamples/NativeEventFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
28468E9718EC686500DBB015 /* NativeEventFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = NativeEventFormViewController.m; path = Examples/RealExamples/NativeEventFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
28468EA218EF41D300DBB015 /* InputsFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = InputsFormViewController.h; path = Examples/Inputs/InputsFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
28468EA318EF41D300DBB015 /* InputsFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = InputsFormViewController.m; path = Examples/Inputs/InputsFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
28468EA618EF594800DBB015 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
2850C5F818D0F706002B7D0A /* XLForm.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XLForm.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2850C5FB18D0F706002B7D0A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
2850C5FD18D0F706002B7D0A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
|
||||
2850C5FF18D0F706002B7D0A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
|
||||
2850C60318D0F706002B7D0A /* XLForm-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "XLForm-Info.plist"; sourceTree = "<group>"; };
|
||||
2850C60518D0F706002B7D0A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
2850C60718D0F706002B7D0A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = main.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
2850C60918D0F706002B7D0A /* XLForm-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XLForm-Prefix.pch"; sourceTree = "<group>"; };
|
||||
2850C60A18D0F706002B7D0A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = AppDelegate.h; path = Examples/AppDelegate.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
28815E2D1A8589F600B674D2 /* MapViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = MapViewController.xib; path = Examples/Selectors/CustomSelectors/XLFormRowViewController/MapViewController.xib; sourceTree = "<group>"; };
|
||||
28A7661E193248BD00D69546 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
28A76624193251E500D69546 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Examples/AppDelegate.m; sourceTree = "<group>"; };
|
||||
28A7662C1932E98A00D69546 /* HTTPSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HTTPSessionManager.h; path = Examples/Selectors/Helpers/HTTPSessionManager.h; sourceTree = "<group>"; };
|
||||
28A7662D1932E98A00D69546 /* HTTPSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HTTPSessionManager.m; path = Examples/Selectors/Helpers/HTTPSessionManager.m; sourceTree = "<group>"; };
|
||||
28A766351932EA1F00D69546 /* UserLocalDataLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserLocalDataLoader.h; sourceTree = "<group>"; };
|
||||
28A766361932EA1F00D69546 /* UserLocalDataLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserLocalDataLoader.m; sourceTree = "<group>"; };
|
||||
28A766371932EA1F00D69546 /* UserRemoteDataLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserRemoteDataLoader.h; sourceTree = "<group>"; };
|
||||
28A766381932EA1F00D69546 /* UserRemoteDataLoader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UserRemoteDataLoader.m; sourceTree = "<group>"; };
|
||||
28A7663F1932EC9C00D69546 /* CoreDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoreDataStore.h; sourceTree = "<group>"; };
|
||||
28A766401932EC9C00D69546 /* CoreDataStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoreDataStore.m; sourceTree = "<group>"; };
|
||||
28A766411932EC9C00D69546 /* User+Additions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "User+Additions.h"; sourceTree = "<group>"; };
|
||||
28A766421932EC9C00D69546 /* User+Additions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "User+Additions.m"; sourceTree = "<group>"; };
|
||||
28A766491932ED3400D69546 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = "<group>"; };
|
||||
28A7664B1932EE0B00D69546 /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = User.h; sourceTree = "<group>"; };
|
||||
28A7664C1932EE0B00D69546 /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = User.m; sourceTree = "<group>"; };
|
||||
28A766531932F22400D69546 /* UsersTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UsersTableViewController.h; path = Examples/Selectors/DynamicSelector/UsersTableViewController.h; sourceTree = "<group>"; };
|
||||
28A766541932F22400D69546 /* UsersTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = UsersTableViewController.m; path = Examples/Selectors/DynamicSelector/UsersTableViewController.m; sourceTree = "<group>"; };
|
||||
28A7665C1932F61100D69546 /* DynamicSelectorsFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DynamicSelectorsFormViewController.h; path = Examples/Selectors/DynamicSelector/DynamicSelectorsFormViewController.h; sourceTree = "<group>"; };
|
||||
28A7665D1932F61100D69546 /* DynamicSelectorsFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DynamicSelectorsFormViewController.m; path = Examples/Selectors/DynamicSelector/DynamicSelectorsFormViewController.m; sourceTree = "<group>"; };
|
||||
28A8083D190D9083009D77F8 /* iPhoneStoryboard.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = iPhoneStoryboard.storyboard; path = Examples/StoryboardExample/iPhoneStoryboard.storyboard; sourceTree = "<group>"; };
|
||||
28A85D5718E346C100E81A26 /* XLFormImageSelectorCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = XLFormImageSelectorCell.h; path = Examples/Others/CustomCells/XLFormImageSelectorCell.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
28A85D5818E346C100E81A26 /* XLFormImageSelectorCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = XLFormImageSelectorCell.m; path = Examples/Others/CustomCells/XLFormImageSelectorCell.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
28DBB03F18D76FDC00FB8A8B /* MultivaluedFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; name = MultivaluedFormViewController.h; path = Examples/MultiValuedSections/MultivaluedFormViewController.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; };
|
||||
28DBB04018D76FDC00FB8A8B /* MultivaluedFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; name = MultivaluedFormViewController.m; path = Examples/MultiValuedSections/MultivaluedFormViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
|
||||
28F89F2C1AA4EA5600E90218 /* ValidationExamplesFormViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ValidationExamplesFormViewController.h; path = Examples/Validations/ValidationExamplesFormViewController.h; sourceTree = "<group>"; };
|
||||
28F89F2D1AA4EA5600E90218 /* ValidationExamplesFormViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ValidationExamplesFormViewController.m; path = Examples/Validations/ValidationExamplesFormViewController.m; sourceTree = "<group>"; };
|
||||
3C0357EF1AB0D82300200C8A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
3C3B01D21AB741EF0027CD45 /* XLFormRatingCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormRatingCell.h; path = Examples/CustomRows/Rating/XLFormRatingCell.h; sourceTree = "<group>"; };
|
||||
3C3B01D31AB741EF0027CD45 /* XLFormRatingCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormRatingCell.m; path = Examples/CustomRows/Rating/XLFormRatingCell.m; sourceTree = "<group>"; };
|
||||
3C3B01D41AB741EF0027CD45 /* XLFormRatingCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = XLFormRatingCell.xib; path = Examples/CustomRows/Rating/XLFormRatingCell.xib; sourceTree = "<group>"; };
|
||||
3C3B01D71AB7497D0027CD45 /* XLFormWeekDaysCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormWeekDaysCell.h; path = Examples/CustomRows/Weekdays/XLFormWeekDaysCell.h; sourceTree = "<group>"; };
|
||||
3C3B01D81AB7497D0027CD45 /* XLFormWeekDaysCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormWeekDaysCell.m; path = Examples/CustomRows/Weekdays/XLFormWeekDaysCell.m; sourceTree = "<group>"; };
|
||||
3C3B01D91AB7497D0027CD45 /* XLFormWeekDaysCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = XLFormWeekDaysCell.xib; path = Examples/CustomRows/Weekdays/XLFormWeekDaysCell.xib; sourceTree = "<group>"; };
|
||||
3C3B01DE1AB7499A0027CD45 /* XLRatingView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLRatingView.h; path = Examples/CustomRows/Rating/RatingView/XLRatingView.h; sourceTree = "<group>"; };
|
||||
3C3B01E01AB7499A0027CD45 /* XLRatingView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLRatingView.m; path = Examples/CustomRows/Rating/RatingView/XLRatingView.m; sourceTree = "<group>"; };
|
||||
3C3B01EE1AB74BDC0027CD45 /* FloatLabeledTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FloatLabeledTextFieldCell.h; path = Examples/CustomRows/FloatLabeledTextField/FloatLabeledTextFieldCell.h; sourceTree = "<group>"; };
|
||||
3C3B01EF1AB74BDC0027CD45 /* FloatLabeledTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FloatLabeledTextFieldCell.m; path = Examples/CustomRows/FloatLabeledTextField/FloatLabeledTextFieldCell.m; sourceTree = "<group>"; };
|
||||
3CDAFC781AB0AFA4000F75B6 /* CustomRowsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomRowsViewController.h; path = Examples/CustomRows/CustomRowsViewController.h; sourceTree = "<group>"; };
|
||||
3CDAFC791AB0AFA4000F75B6 /* CustomRowsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomRowsViewController.m; path = Examples/CustomRows/CustomRowsViewController.m; sourceTree = "<group>"; };
|
||||
7B0D2D6A86E2A41ED22E8A35 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
976A33EE62A018A7257B4878 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
|
||||
D51B8B2A19126664008C0478 /* XLFormCustomCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = XLFormCustomCell.h; path = Examples/Others/CustomCells/XLFormCustomCell.h; sourceTree = "<group>"; };
|
||||
D51B8B2B19126664008C0478 /* XLFormCustomCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = XLFormCustomCell.m; path = Examples/Others/CustomCells/XLFormCustomCell.m; sourceTree = "<group>"; };
|
||||
F6DF43B7BBF44F72A4493E8E /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
2850C5F518D0F706002B7D0A /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
28A7661F193248BD00D69546 /* CoreData.framework in Frameworks */,
|
||||
2850C5FE18D0F706002B7D0A /* CoreGraphics.framework in Frameworks */,
|
||||
2850C60018D0F706002B7D0A /* UIKit.framework in Frameworks */,
|
||||
2850C5FC18D0F706002B7D0A /* Foundation.framework in Frameworks */,
|
||||
2CA9A3FC06E94345A2FDE415 /* libPods.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
15E61D225B0D27FAB51BDD90 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
7B0D2D6A86E2A41ED22E8A35 /* Pods.debug.xcconfig */,
|
||||
976A33EE62A018A7257B4878 /* Pods.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
282C5EEF18D33C1800A5D47C /* Inputs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28468EA218EF41D300DBB015 /* InputsFormViewController.h */,
|
||||
28468EA318EF41D300DBB015 /* InputsFormViewController.m */,
|
||||
);
|
||||
name = Inputs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
282EB2791AB5FD66004A736F /* AccessoryViews */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
282EB27A1AB5FF33004A736F /* AccessoryViewFormViewController.h */,
|
||||
282EB27B1AB5FF33004A736F /* AccessoryViewFormViewController.m */,
|
||||
);
|
||||
name = AccessoryViews;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
283B59AF19531DDA000828CD /* CustomSelectors */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
283B59B319532A8E000828CD /* XLFormRowViewController */,
|
||||
283B59B5195334AF000828CD /* CustomSelectorsFormViewController.h */,
|
||||
283B59B6195334AF000828CD /* CustomSelectorsFormViewController.m */,
|
||||
);
|
||||
name = CustomSelectors;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
283B59B319532A8E000828CD /* XLFormRowViewController */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
283B59B019532415000828CD /* MapViewController.h */,
|
||||
283B59B119532415000828CD /* MapViewController.m */,
|
||||
281E5BE719538F4A006D93C5 /* CLLocationValueTrasformer.h */,
|
||||
281E5BE819538F4A006D93C5 /* CLLocationValueTrasformer.m */,
|
||||
28815E2D1A8589F600B674D2 /* MapViewController.xib */,
|
||||
);
|
||||
name = XLFormRowViewController;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
283C6B7A1999BA1B00A5283D /* UICustomization */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
283C6B7B1999BAF100A5283D /* UICustomizationFormViewController.h */,
|
||||
283C6B7C1999BAF100A5283D /* UICustomizationFormViewController.m */,
|
||||
);
|
||||
name = UICustomization;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2843EB4818D496CB00F13E2B /* Selectors */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
283B59AF19531DDA000828CD /* CustomSelectors */,
|
||||
28A766521932F1FA00D69546 /* DynamicSelector */,
|
||||
28A7662B1932E92D00D69546 /* Helpers */,
|
||||
2843EB4918D496F600F13E2B /* SelectorsFormViewController.h */,
|
||||
2843EB4A18D496F600F13E2B /* SelectorsFormViewController.m */,
|
||||
);
|
||||
name = Selectors;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2843EB4F18D4CFA100F13E2B /* Others */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7662A1932A3D800D69546 /* CustomCells */,
|
||||
2843EB5018D4CFC700F13E2B /* OthersFormViewController.h */,
|
||||
2843EB5118D4CFC700F13E2B /* OthersFormViewController.m */,
|
||||
);
|
||||
name = Others;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2843EB5318D4F77F00F13E2B /* Dates */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2843EB5418D4F7B700F13E2B /* DatesFormViewController.h */,
|
||||
2843EB5518D4F7B700F13E2B /* DatesFormViewController.m */,
|
||||
);
|
||||
name = Dates;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2843EB5F18D76B2D00F13E2B /* MultiValuedSections */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28DBB03F18D76FDC00FB8A8B /* MultivaluedFormViewController.h */,
|
||||
28DBB04018D76FDC00FB8A8B /* MultivaluedFormViewController.m */,
|
||||
);
|
||||
name = MultiValuedSections;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28468E9218EA52CA00DBB015 /* RealExamples */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28468E9618EC686500DBB015 /* NativeEventFormViewController.h */,
|
||||
28468E9718EC686500DBB015 /* NativeEventFormViewController.m */,
|
||||
);
|
||||
name = RealExamples;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C5EF18D0F706002B7D0A = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2850C62B18D0F92F002B7D0A /* Examples */,
|
||||
2850C60118D0F706002B7D0A /* XLForm */,
|
||||
2850C5FA18D0F706002B7D0A /* Frameworks */,
|
||||
2850C5F918D0F706002B7D0A /* Products */,
|
||||
15E61D225B0D27FAB51BDD90 /* Pods */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C5F918D0F706002B7D0A /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2850C5F818D0F706002B7D0A /* XLForm.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C5FA18D0F706002B7D0A /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7661E193248BD00D69546 /* CoreData.framework */,
|
||||
2850C5FB18D0F706002B7D0A /* Foundation.framework */,
|
||||
2850C5FD18D0F706002B7D0A /* CoreGraphics.framework */,
|
||||
2850C5FF18D0F706002B7D0A /* UIKit.framework */,
|
||||
F6DF43B7BBF44F72A4493E8E /* libPods.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C60118D0F706002B7D0A /* XLForm */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2850C60218D0F706002B7D0A /* Supporting Files */,
|
||||
);
|
||||
path = XLForm;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C60218D0F706002B7D0A /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C0357EF1AB0D82300200C8A /* Images.xcassets */,
|
||||
2850C60318D0F706002B7D0A /* XLForm-Info.plist */,
|
||||
2850C60418D0F706002B7D0A /* InfoPlist.strings */,
|
||||
2850C60718D0F706002B7D0A /* main.m */,
|
||||
2850C60918D0F706002B7D0A /* XLForm-Prefix.pch */,
|
||||
28468EA518EF594800DBB015 /* Localizable.strings */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C62B18D0F92F002B7D0A /* Examples */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
282EB2791AB5FD66004A736F /* AccessoryViews */,
|
||||
3CDAFC741AB0AEE5000F75B6 /* CustomRows */,
|
||||
28F89F2B1AA4E99500E90218 /* Validations */,
|
||||
283C6B7A1999BA1B00A5283D /* UICustomization */,
|
||||
28A76624193251E500D69546 /* AppDelegate.m */,
|
||||
28A8083C190D903D009D77F8 /* StoryboardExample */,
|
||||
28468E9218EA52CA00DBB015 /* RealExamples */,
|
||||
2843EB5F18D76B2D00F13E2B /* MultiValuedSections */,
|
||||
2843EB5318D4F77F00F13E2B /* Dates */,
|
||||
2843EB4F18D4CFA100F13E2B /* Others */,
|
||||
2843EB4818D496CB00F13E2B /* Selectors */,
|
||||
2850C60A18D0F706002B7D0A /* AppDelegate.h */,
|
||||
282C5EEF18D33C1800A5D47C /* Inputs */,
|
||||
2843EB4518D4915800F13E2B /* ExamplesFormViewController.h */,
|
||||
2843EB4618D4915800F13E2B /* ExamplesFormViewController.m */,
|
||||
);
|
||||
name = Examples;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A7662A1932A3D800D69546 /* CustomCells */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A85D5718E346C100E81A26 /* XLFormImageSelectorCell.h */,
|
||||
28A85D5818E346C100E81A26 /* XLFormImageSelectorCell.m */,
|
||||
D51B8B2A19126664008C0478 /* XLFormCustomCell.h */,
|
||||
D51B8B2B19126664008C0478 /* XLFormCustomCell.m */,
|
||||
);
|
||||
name = CustomCells;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A7662B1932E92D00D69546 /* Helpers */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7663D1932EC9C00D69546 /* Data */,
|
||||
28A766301932EA1F00D69546 /* DataLoaders */,
|
||||
28A7662C1932E98A00D69546 /* HTTPSessionManager.h */,
|
||||
28A7662D1932E98A00D69546 /* HTTPSessionManager.m */,
|
||||
);
|
||||
name = Helpers;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A766301932EA1F00D69546 /* DataLoaders */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A766351932EA1F00D69546 /* UserLocalDataLoader.h */,
|
||||
28A766361932EA1F00D69546 /* UserLocalDataLoader.m */,
|
||||
28A766371932EA1F00D69546 /* UserRemoteDataLoader.h */,
|
||||
28A766381932EA1F00D69546 /* UserRemoteDataLoader.m */,
|
||||
);
|
||||
name = DataLoaders;
|
||||
path = Examples/Selectors/Helpers/DataLoaders;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A7663D1932EC9C00D69546 /* Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7663E1932EC9C00D69546 /* Store */,
|
||||
28A766411932EC9C00D69546 /* User+Additions.h */,
|
||||
28A766421932EC9C00D69546 /* User+Additions.m */,
|
||||
28A766481932ED3400D69546 /* Model.xcdatamodeld */,
|
||||
28A7664B1932EE0B00D69546 /* User.h */,
|
||||
28A7664C1932EE0B00D69546 /* User.m */,
|
||||
);
|
||||
name = Data;
|
||||
path = Examples/Selectors/Helpers/Data;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A7663E1932EC9C00D69546 /* Store */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7663F1932EC9C00D69546 /* CoreDataStore.h */,
|
||||
28A766401932EC9C00D69546 /* CoreDataStore.m */,
|
||||
);
|
||||
path = Store;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A766521932F1FA00D69546 /* DynamicSelector */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A7665A1932F55700D69546 /* XLFormRowViewController */,
|
||||
28A7665C1932F61100D69546 /* DynamicSelectorsFormViewController.h */,
|
||||
28A7665D1932F61100D69546 /* DynamicSelectorsFormViewController.m */,
|
||||
);
|
||||
name = DynamicSelector;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A7665A1932F55700D69546 /* XLFormRowViewController */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A766531932F22400D69546 /* UsersTableViewController.h */,
|
||||
28A766541932F22400D69546 /* UsersTableViewController.m */,
|
||||
);
|
||||
name = XLFormRowViewController;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28A8083C190D903D009D77F8 /* StoryboardExample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28A8083D190D9083009D77F8 /* iPhoneStoryboard.storyboard */,
|
||||
);
|
||||
name = StoryboardExample;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28F89F2B1AA4E99500E90218 /* Validations */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28F89F2C1AA4EA5600E90218 /* ValidationExamplesFormViewController.h */,
|
||||
28F89F2D1AA4EA5600E90218 /* ValidationExamplesFormViewController.m */,
|
||||
);
|
||||
name = Validations;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3C3B01D01AB741C40027CD45 /* Rating */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C3B01DC1AB7498B0027CD45 /* RatingView */,
|
||||
3C3B01D21AB741EF0027CD45 /* XLFormRatingCell.h */,
|
||||
3C3B01D31AB741EF0027CD45 /* XLFormRatingCell.m */,
|
||||
3C3B01D41AB741EF0027CD45 /* XLFormRatingCell.xib */,
|
||||
);
|
||||
name = Rating;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3C3B01D11AB741CC0027CD45 /* Weekdays */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C3B01D71AB7497D0027CD45 /* XLFormWeekDaysCell.h */,
|
||||
3C3B01D81AB7497D0027CD45 /* XLFormWeekDaysCell.m */,
|
||||
3C3B01D91AB7497D0027CD45 /* XLFormWeekDaysCell.xib */,
|
||||
);
|
||||
name = Weekdays;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3C3B01DC1AB7498B0027CD45 /* RatingView */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C3B01DE1AB7499A0027CD45 /* XLRatingView.h */,
|
||||
3C3B01E01AB7499A0027CD45 /* XLRatingView.m */,
|
||||
);
|
||||
name = RatingView;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3C3B01E31AB74AC10027CD45 /* FloatLabeledTextField */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C3B01EE1AB74BDC0027CD45 /* FloatLabeledTextFieldCell.h */,
|
||||
3C3B01EF1AB74BDC0027CD45 /* FloatLabeledTextFieldCell.m */,
|
||||
);
|
||||
name = FloatLabeledTextField;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
3CDAFC741AB0AEE5000F75B6 /* CustomRows */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
3C3B01D01AB741C40027CD45 /* Rating */,
|
||||
3C3B01E31AB74AC10027CD45 /* FloatLabeledTextField */,
|
||||
3C3B01D11AB741CC0027CD45 /* Weekdays */,
|
||||
3CDAFC781AB0AFA4000F75B6 /* CustomRowsViewController.h */,
|
||||
3CDAFC791AB0AFA4000F75B6 /* CustomRowsViewController.m */,
|
||||
);
|
||||
name = CustomRows;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2850C5F718D0F706002B7D0A /* XLForm */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2850C62418D0F707002B7D0A /* Build configuration list for PBXNativeTarget "XLForm" */;
|
||||
buildPhases = (
|
||||
0EA9FCE3DA0D444498836D37 /* Check Pods Manifest.lock */,
|
||||
2850C5F418D0F706002B7D0A /* Sources */,
|
||||
2850C5F518D0F706002B7D0A /* Frameworks */,
|
||||
2850C5F618D0F706002B7D0A /* Resources */,
|
||||
CFE72E068B5F4D9BB45FB757 /* Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = XLForm;
|
||||
productName = XLForm;
|
||||
productReference = 2850C5F818D0F706002B7D0A /* XLForm.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
2850C5F018D0F706002B7D0A /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0510;
|
||||
ORGANIZATIONNAME = Xmartlabs;
|
||||
};
|
||||
buildConfigurationList = 2850C5F318D0F706002B7D0A /* Build configuration list for PBXProject "XLForm" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 2850C5EF18D0F706002B7D0A;
|
||||
productRefGroup = 2850C5F918D0F706002B7D0A /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2850C5F718D0F706002B7D0A /* XLForm */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
2850C5F618D0F706002B7D0A /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
28468EA718EF594900DBB015 /* Localizable.strings in Resources */,
|
||||
2850C60618D0F706002B7D0A /* InfoPlist.strings in Resources */,
|
||||
28815E2E1A8589F600B674D2 /* MapViewController.xib in Resources */,
|
||||
3C0357F01AB0D82300200C8A /* Images.xcassets in Resources */,
|
||||
3C3B01DB1AB7497D0027CD45 /* XLFormWeekDaysCell.xib in Resources */,
|
||||
3C3B01D61AB741EF0027CD45 /* XLFormRatingCell.xib in Resources */,
|
||||
28A8083E190D9083009D77F8 /* iPhoneStoryboard.storyboard in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
0EA9FCE3DA0D444498836D37 /* Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
CFE72E068B5F4D9BB45FB757 /* Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Copy Pods Resources";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
2850C5F418D0F706002B7D0A /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
283B59B7195334AF000828CD /* CustomSelectorsFormViewController.m in Sources */,
|
||||
28A766551932F22400D69546 /* UsersTableViewController.m in Sources */,
|
||||
3CDAFC7A1AB0AFA4000F75B6 /* CustomRowsViewController.m in Sources */,
|
||||
28A7663B1932EA1F00D69546 /* UserLocalDataLoader.m in Sources */,
|
||||
282EB27C1AB5FF33004A736F /* AccessoryViewFormViewController.m in Sources */,
|
||||
2850C60818D0F706002B7D0A /* main.m in Sources */,
|
||||
D51B8B2C19126664008C0478 /* XLFormCustomCell.m in Sources */,
|
||||
28A7664D1932EE0B00D69546 /* User.m in Sources */,
|
||||
28A7664A1932ED3400D69546 /* Model.xcdatamodeld in Sources */,
|
||||
3C3B01F01AB74BDC0027CD45 /* FloatLabeledTextFieldCell.m in Sources */,
|
||||
28A766461932EC9C00D69546 /* User+Additions.m in Sources */,
|
||||
28DBB04118D76FDC00FB8A8B /* MultivaluedFormViewController.m in Sources */,
|
||||
28A85D5918E346C100E81A26 /* XLFormImageSelectorCell.m in Sources */,
|
||||
28468E9818EC686500DBB015 /* NativeEventFormViewController.m in Sources */,
|
||||
3C3B01DA1AB7497D0027CD45 /* XLFormWeekDaysCell.m in Sources */,
|
||||
28F89F2E1AA4EA5600E90218 /* ValidationExamplesFormViewController.m in Sources */,
|
||||
3C3B01D51AB741EF0027CD45 /* XLFormRatingCell.m in Sources */,
|
||||
28A7665E1932F61100D69546 /* DynamicSelectorsFormViewController.m in Sources */,
|
||||
281E5BE919538F4A006D93C5 /* CLLocationValueTrasformer.m in Sources */,
|
||||
2843EB5618D4F7B700F13E2B /* DatesFormViewController.m in Sources */,
|
||||
283C6B7D1999BAF100A5283D /* UICustomizationFormViewController.m in Sources */,
|
||||
3C3B01E21AB7499A0027CD45 /* XLRatingView.m in Sources */,
|
||||
28A7662E1932E98A00D69546 /* HTTPSessionManager.m in Sources */,
|
||||
283B59B219532415000828CD /* MapViewController.m in Sources */,
|
||||
2843EB4718D4915800F13E2B /* ExamplesFormViewController.m in Sources */,
|
||||
28A766451932EC9C00D69546 /* CoreDataStore.m in Sources */,
|
||||
28A7663C1932EA1F00D69546 /* UserRemoteDataLoader.m in Sources */,
|
||||
2843EB5218D4CFC700F13E2B /* OthersFormViewController.m in Sources */,
|
||||
2843EB4B18D496F600F13E2B /* SelectorsFormViewController.m in Sources */,
|
||||
28468EA418EF41D300DBB015 /* InputsFormViewController.m in Sources */,
|
||||
28A76625193251E500D69546 /* AppDelegate.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
28468EA518EF594800DBB015 /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
28468EA618EF594800DBB015 /* en */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2850C60418D0F706002B7D0A /* InfoPlist.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
2850C60518D0F706002B7D0A /* en */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
2850C62218D0F707002B7D0A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2850C62318D0F707002B7D0A /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
2850C62518D0F707002B7D0A /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7B0D2D6A86E2A41ED22E8A35 /* Pods.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "XLForm/XLForm-Prefix.pch";
|
||||
INFOPLIST_FILE = "XLForm/XLForm-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2850C62618D0F707002B7D0A /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 976A33EE62A018A7257B4878 /* Pods.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "XLForm/XLForm-Prefix.pch";
|
||||
INFOPLIST_FILE = "XLForm/XLForm-Info.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 7.1;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2850C5F318D0F706002B7D0A /* Build configuration list for PBXProject "XLForm" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2850C62218D0F707002B7D0A /* Debug */,
|
||||
2850C62318D0F707002B7D0A /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2850C62418D0F707002B7D0A /* Build configuration list for PBXNativeTarget "XLForm" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2850C62518D0F707002B7D0A /* Debug */,
|
||||
2850C62618D0F707002B7D0A /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
28A766481932ED3400D69546 /* Model.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
28A766491932ED3400D69546 /* Model.xcdatamodel */,
|
||||
);
|
||||
currentVersion = 28A766491932ED3400D69546 /* Model.xcdatamodel */;
|
||||
path = Model.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
};
|
||||
/* End XCVersionGroup section */
|
||||
};
|
||||
rootObject = 2850C5F018D0F706002B7D0A /* Project object */;
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x",
|
||||
"filename" : "Star.png"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 238 KiB |
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x",
|
||||
"filename" : "vweekday.png"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 237 KiB |
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x",
|
||||
"filename" : "default-avatar@2x.png"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 7.5 KiB |
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x",
|
||||
"filename" : "xweekday.png"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 237 KiB |
@@ -2,6 +2,8 @@
|
||||
// OthersFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -1,6 +1,9 @@
|
||||
// XLFormRatingCell.m
|
||||
//
|
||||
// OthersFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -22,38 +25,33 @@
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLFormRatingCell.h"
|
||||
#import "OthersFormViewController.h"
|
||||
|
||||
NSString * const XLFormRowDescriptorTypeRate = @"XLFormRowDescriptorTypeRate";
|
||||
NSString *const kSwitchBool = @"switchBool";
|
||||
NSString *const kSwitchCheck = @"switchBool";
|
||||
|
||||
@implementation XLFormRatingCell
|
||||
@implementation OthersFormViewController
|
||||
|
||||
+(void)load
|
||||
|
||||
- (id)init
|
||||
{
|
||||
[XLFormViewController.cellClassesForRowDescriptorTypes setObject:NSStringFromClass([XLFormRatingCell class]) forKey:XLFormRowDescriptorTypeRate];
|
||||
}
|
||||
|
||||
- (void)configure
|
||||
{
|
||||
[super configure];
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Other Cells"];
|
||||
XLFormSectionDescriptor * section;
|
||||
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self.ratingView addTarget:self action:@selector(rateChanged:) forControlEvents:UIControlEventValueChanged];
|
||||
}
|
||||
|
||||
- (void)update
|
||||
{
|
||||
[super update];
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Other Cells"];
|
||||
section.footerTitle = @"OthersFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
self.ratingView.value = [self.rowDescriptor.value floatValue];
|
||||
self.rateTitle.text = self.rowDescriptor.title;
|
||||
// Switch
|
||||
[section addFormRow:[XLFormRowDescriptor formRowDescriptorWithTag:kSwitchBool rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"Switch"]];
|
||||
|
||||
// check
|
||||
[section addFormRow:[XLFormRowDescriptor formRowDescriptorWithTag:kSwitchCheck rowType:XLFormRowDescriptorTypeBooleanCheck title:@"Check"]];
|
||||
|
||||
|
||||
return [super initWithForm:form];
|
||||
}
|
||||
|
||||
#pragma mark - Events
|
||||
|
||||
-(void)rateChanged:(AXRatingView *)ratingView
|
||||
{
|
||||
self.rowDescriptor.value = [NSNumber numberWithFloat:ratingView.value];
|
||||
}
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
@@ -2,6 +2,8 @@
|
||||
// NativeEventNavigationViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -0,0 +1,230 @@
|
||||
//
|
||||
// NativeEventNavigationViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "XLForm.h"
|
||||
#import "NativeEventFormViewController.h"
|
||||
|
||||
@implementation NativeEventNavigationViewController
|
||||
|
||||
-(id)init
|
||||
{
|
||||
self = [super initWithRootViewController:[[NativeEventFormViewController alloc] init]];
|
||||
return self;
|
||||
}
|
||||
|
||||
-(void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
[self.view setTintColor:[UIColor redColor]];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@interface NativeEventFormViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation NativeEventFormViewController
|
||||
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self){
|
||||
XLFormDescriptor * form;
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
form = [XLFormDescriptor formDescriptorWithTitle:@"Add Event"];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Title
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"title" rowType:XLFormRowDescriptorTypeText];
|
||||
[row.cellConfigAtConfigure setObject:@"Title" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Location
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"location" rowType:XLFormRowDescriptorTypeText];
|
||||
[row.cellConfigAtConfigure setObject:@"Location" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// All-day
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"all-day" rowType:XLFormRowDescriptorTypeBooleanSwitch title:@"All-day"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Starts
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"starts" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Starts"];
|
||||
row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*24];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Ends
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"ends" rowType:XLFormRowDescriptorTypeDateTimeInline title:@"Ends"];
|
||||
row.value = [NSDate dateWithTimeIntervalSinceNow:60*60*25];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Repeat
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"repeat" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Repeat"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Never"];
|
||||
row.selectorTitle = @"Repeat";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Never"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Every Day"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Every Week"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Every 2 Weeks"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Every Month"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(5) displayText:@"Every Year"],
|
||||
];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Alert
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"alert" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Alert"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"None"];
|
||||
row.selectorTitle = @"Event Alert";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"None"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"At time of event"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"5 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"15 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"30 minutes before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(5) displayText:@"1 hour before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(6) displayText:@"2 hours before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(7) displayText:@"1 day before"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(8) displayText:@"2 days before"],
|
||||
];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Show As
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"showAs" rowType:XLFormRowDescriptorTypeSelectorPush title:@"Show As"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Busy"];
|
||||
row.selectorTitle = @"Show As";
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Busy"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Free"]];
|
||||
[section addFormRow:row];
|
||||
|
||||
section = [XLFormSectionDescriptor formSection];
|
||||
[form addFormSection:section];
|
||||
|
||||
// URL
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"url" rowType:XLFormRowDescriptorTypeURL];
|
||||
[row.cellConfigAtConfigure setObject:@"URL" forKey:@"textField.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
// Location
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:@"notes" rowType:XLFormRowDescriptorTypeTextView];
|
||||
[row.cellConfigAtConfigure setObject:@"Notes" forKey:@"textView.placeholder"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
self.form = form;
|
||||
self.formMode = XLFormModeCreate;
|
||||
self.showCancelButton = YES;
|
||||
self.showSaveButton = YES;
|
||||
self.showDeleteButton = YES;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - XLFormDescriptorDelegate
|
||||
|
||||
-(void)formRowDescriptorValueHasChanged:(XLFormRowDescriptor *)rowDescriptor oldValue:(id)oldValue newValue:(id)newValue
|
||||
{
|
||||
[super formRowDescriptorValueHasChanged:rowDescriptor oldValue:oldValue newValue:newValue];
|
||||
if ([rowDescriptor.tag isEqualToString:@"alert"]){
|
||||
if ([[rowDescriptor.value valueData] isEqualToNumber:@(0)] == NO && [[oldValue valueData] isEqualToNumber:@(0)]){
|
||||
|
||||
XLFormRowDescriptor * newRow = [rowDescriptor copy];
|
||||
[newRow setTag:@"secondAlert"];
|
||||
newRow.title = @"Second Alert";
|
||||
[self.form addFormRow:newRow afterRow:rowDescriptor];
|
||||
}
|
||||
else if ([[oldValue valueData] isEqualToNumber:@(0)] == NO && [[newValue valueData] isEqualToNumber:@(0)]){
|
||||
[self.form removeFormRowWithTag:@"secondAlert"];
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"all-day"]){
|
||||
XLFormDateCell * dateStartCell = (XLFormDateCell *)[[self.form formRowWithTag:@"starts"] cellForFormController:self];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[[self.form formRowWithTag:@"ends"] cellForFormController:self];
|
||||
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
|
||||
if ([[rowDescriptor.value valueData] boolValue] == YES){
|
||||
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
|
||||
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
|
||||
[dateStartCell setFormDatePickerMode:XLFormDateDatePickerModeDate];
|
||||
[dateEndCell setFormDatePickerMode:XLFormDateDatePickerModeDate];
|
||||
}
|
||||
else{
|
||||
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
|
||||
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
|
||||
[dateStartCell setFormDatePickerMode:XLFormDateDatePickerModeDateTime];
|
||||
[dateEndCell setFormDatePickerMode:XLFormDateDatePickerModeDateTime];
|
||||
}
|
||||
dateStartCell.dateFormatter = dateFormatter;
|
||||
dateEndCell.dateFormatter = dateFormatter;
|
||||
[dateStartCell update];
|
||||
[dateEndCell update];
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"starts"]){
|
||||
XLFormRowDescriptor * startDateDescriptor = [self.form formRowWithTag:@"starts"];
|
||||
XLFormRowDescriptor * endDateDescriptor = [self.form formRowWithTag:@"ends"];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[endDateDescriptor cellForFormController:self];
|
||||
if ([startDateDescriptor.value compare:endDateDescriptor.value] == NSOrderedDescending) {
|
||||
// startDateDescriptor is later than endDateDescriptor
|
||||
endDateDescriptor.value = [[NSDate alloc] initWithTimeInterval:(60*60*24) sinceDate:startDateDescriptor.value];
|
||||
[dateEndCell update];
|
||||
}
|
||||
}
|
||||
else if ([rowDescriptor.tag isEqualToString:@"ends"]){
|
||||
XLFormRowDescriptor * startDateDescriptor = [self.form formRowWithTag:@"starts"];
|
||||
XLFormRowDescriptor * endDateDescriptor = [self.form formRowWithTag:@"ends"];
|
||||
XLFormDateCell * dateEndCell = (XLFormDateCell *)[endDateDescriptor cellForFormController:self];
|
||||
if ([startDateDescriptor.value compare:endDateDescriptor.value] == NSOrderedDescending) {
|
||||
// startDateDescriptor is later than endDateDescriptor
|
||||
NSDictionary *strikeThroughAttribute = [NSDictionary dictionaryWithObject:@1
|
||||
forKey:NSStrikethroughStyleAttributeName];
|
||||
NSAttributedString* strikeThroughText = [[NSAttributedString alloc] initWithString:dateEndCell.detailTextLabel.text attributes:strikeThroughAttribute];
|
||||
dateEndCell.detailTextLabel.attributedText = strikeThroughText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 868 KiB After Width: | Height: | Size: 868 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -2,6 +2,8 @@
|
||||
// SelectorsFormViewController.h
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
@@ -0,0 +1,163 @@
|
||||
//
|
||||
// SelectorsFormViewController.m
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Created by Martin Barreto on 31/3/14.
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import "SelectorsFormViewController.h"
|
||||
|
||||
NSString *const kSelectorPush = @"selectorPush";
|
||||
NSString *const kSelectorActionSheet = @"selectorActionSheet";
|
||||
NSString *const kSelectorAlertView = @"selectorAlertView";
|
||||
NSString *const kSelectorLeftRight = @"selectorLeftRight";
|
||||
NSString *const kSelectorPushDisabled = @"selectorPushDisabled";
|
||||
NSString *const kSelectorActionSheetDisabled = @"selectorActionSheetDisabled";
|
||||
NSString *const kSelectorLeftRightDisabled = @"selectorLeftRightDisabled";
|
||||
|
||||
|
||||
@implementation SelectorsFormViewController
|
||||
|
||||
- (id)init
|
||||
{
|
||||
XLFormDescriptor * form = [XLFormDescriptor formDescriptorWithTitle:@"Selectors"];
|
||||
XLFormSectionDescriptor * section;
|
||||
XLFormRowDescriptor * row;
|
||||
|
||||
// Basic Information
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Selectors"];
|
||||
section.footerTitle = @"SelectorsFormViewController.h";
|
||||
[form addFormSection:section];
|
||||
|
||||
|
||||
// Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPush rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector Push"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
// Selector Action Sheet
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorActionSheet rowType:XLFormRowDescriptorTypeSelectorActionSheet title:@"Selector Sheet"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
|
||||
// Selector Alert View
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorAlertView rowType:XLFormRowDescriptorTypeSelectorAlertView title:@"Selector Alert View"];
|
||||
row.selectorOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"]
|
||||
];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
// Selector Left Right
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorLeftRight rowType:XLFormRowDescriptorTypeSelectorLeftRight title:@"Selector Left Right"];
|
||||
row.leftRightSelectorLeftOptionSelected = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
|
||||
NSArray * rightOptions = @[[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Right Option 1"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Right Option 2"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Right Option 3"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"],
|
||||
[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Right Option 5"]
|
||||
];
|
||||
|
||||
// create right selectors
|
||||
NSMutableArray * leftRightSelectorOptions = [[NSMutableArray alloc] init];
|
||||
NSMutableArray * mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:0];
|
||||
XLFormLeftRightSelectorOption * leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(0) displayText:@"Option 1"] httpParameterKey:@"option_1" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:1];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"] httpParameterKey:@"option_2" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:2];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"] httpParameterKey:@"option_3" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:3];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Option 4"] httpParameterKey:@"option_4" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
mutableRightOptions = [rightOptions mutableCopy];
|
||||
[mutableRightOptions removeObjectAtIndex:4];
|
||||
leftRightSelectorOption = [XLFormLeftRightSelectorOption formLeftRightSelectorOptionWithLeftValue:[XLFormOptionsObject formOptionsObjectWithValue:@(4) displayText:@"Option 5"] httpParameterKey:@"option_5" rightOptions:mutableRightOptions];
|
||||
[leftRightSelectorOptions addObject:leftRightSelectorOption];
|
||||
|
||||
row.selectorOptions = leftRightSelectorOptions;
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"];
|
||||
[section addFormRow:row];
|
||||
|
||||
|
||||
|
||||
section = [XLFormSectionDescriptor formSectionWithTitle:@"Disabled & Required Selectors"];
|
||||
[form addFormSection:section];
|
||||
|
||||
// Disabled Selector Push
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorPushDisabled rowType:XLFormRowDescriptorTypeSelectorPush title:@"Selector Push"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
// Disabled Selector Action Sheet
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorActionSheetDisabled rowType:XLFormRowDescriptorTypeSelectorActionSheet title:@"Selector Sheet"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(2) displayText:@"Option 3"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
// Disabled Selector Left Right
|
||||
row = [XLFormRowDescriptor formRowDescriptorWithTag:kSelectorLeftRightDisabled rowType:XLFormRowDescriptorTypeSelectorLeftRight title:@"Selector Left Right"];
|
||||
row.leftRightSelectorLeftOptionSelected = [XLFormOptionsObject formOptionsObjectWithValue:@(1) displayText:@"Option 2"];
|
||||
row.value = [XLFormOptionsObject formOptionsObjectWithValue:@(3) displayText:@"Right Option 4"];
|
||||
row.disabled = YES;
|
||||
[section addFormRow:row];
|
||||
|
||||
return [super initWithForm:form];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
@@ -1,71 +0,0 @@
|
||||
//
|
||||
// DatesFormViewController.swift
|
||||
// XLForm ( https://github.com/xmartlabs/XLForm )
|
||||
//
|
||||
// Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
|
||||
//
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
|
||||
class DatesFormViewController: XLFormViewController {
|
||||
|
||||
struct tag {
|
||||
static let dateTime = "dateTime"
|
||||
static let date = "date"
|
||||
static let time = "time"
|
||||
}
|
||||
|
||||
required init(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder);
|
||||
self.initializeForm()
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
}
|
||||
|
||||
func initializeForm() {
|
||||
var form : XLFormDescriptor
|
||||
var section : XLFormSectionDescriptor
|
||||
var row : XLFormRowDescriptor
|
||||
|
||||
form = XLFormDescriptor.formDescriptorWithTitle("Dates") as XLFormDescriptor
|
||||
|
||||
section = XLFormSectionDescriptor.formSectionWithTitle("Inline Dates") as XLFormSectionDescriptor
|
||||
form.addFormSection(section)
|
||||
|
||||
// Date
|
||||
row = XLFormRowDescriptor(tag: tag.date, rowType: XLFormRowDescriptorTypeDateInline, title:"Date")
|
||||
row.value = NSDate()
|
||||
section.addFormRow(row)
|
||||
|
||||
// Time
|
||||
row = XLFormRowDescriptor(tag: tag.time, rowType: XLFormRowDescriptorTypeTimeInline, title: "Time")
|
||||
row.value = NSDate()
|
||||
section.addFormRow(row)
|
||||
|
||||
// DateTime
|
||||
row = XLFormRowDescriptor(tag: tag.dateTime, rowType: XLFormRowDescriptorTypeDateTimeInline, title: "Date Time")
|
||||
row.value = NSDate()
|
||||
section.addFormRow(row)
|
||||
self.form = form;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
platform :ios, '8.0'
|
||||
|
||||
target 'SwiftExample' do
|
||||
|
||||
pod 'XLForm', :path => '../../'
|
||||
|
||||
end
|
||||
@@ -1,14 +0,0 @@
|
||||
PODS:
|
||||
- XLForm (2.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
- XLForm (from `../../`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
XLForm:
|
||||
:path: ../../
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
XLForm: c87bc94f769f52ce32793282d72d2fb15d0d5638
|
||||
|
||||
COCOAPODS: 0.35.0
|
||||
@@ -1,369 +0,0 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
2724071466166BFA1E54E659 /* libPods-SwiftExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 854F8DF43072D7C59CBECB68 /* libPods-SwiftExample.a */; };
|
||||
2847A6A41AAF2679000A2ABE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2847A6A31AAF2679000A2ABE /* AppDelegate.swift */; };
|
||||
2847A6A91AAF2679000A2ABE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2847A6A71AAF2679000A2ABE /* Main.storyboard */; };
|
||||
2847A6AB1AAF2679000A2ABE /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2847A6AA1AAF2679000A2ABE /* Images.xcassets */; };
|
||||
2847A6AE1AAF2679000A2ABE /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2847A6AC1AAF2679000A2ABE /* LaunchScreen.xib */; };
|
||||
28F490221AAFBBC600C8E0CC /* DatesFormViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28F490211AAFBBC600C8E0CC /* DatesFormViewController.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
2847A69E1AAF2679000A2ABE /* SwiftExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
2847A6A21AAF2679000A2ABE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
2847A6A31AAF2679000A2ABE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
2847A6A81AAF2679000A2ABE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
2847A6AA1AAF2679000A2ABE /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
2847A6AD1AAF2679000A2ABE /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
|
||||
2847A6C31AAF2B14000A2ABE /* SwiftExample-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SwiftExample-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
28F490211AAFBBC600C8E0CC /* DatesFormViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatesFormViewController.swift; sourceTree = "<group>"; };
|
||||
2EB9C638FC2450A0B9786D1E /* Pods-SwiftExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.release.xcconfig"; sourceTree = "<group>"; };
|
||||
420D9BAB7B0D2AF9487DD060 /* Pods-SwiftExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SwiftExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
854F8DF43072D7C59CBECB68 /* libPods-SwiftExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-SwiftExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
2847A69B1AAF2679000A2ABE /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2724071466166BFA1E54E659 /* libPods-SwiftExample.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
2847A6951AAF2679000A2ABE = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2847A6A01AAF2679000A2ABE /* SwiftExample */,
|
||||
2847A69F1AAF2679000A2ABE /* Products */,
|
||||
7A12A831117D9B4D152E0A51 /* Pods */,
|
||||
402AE3EC1FACD058DCF0A2D3 /* Frameworks */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2847A69F1AAF2679000A2ABE /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2847A69E1AAF2679000A2ABE /* SwiftExample.app */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2847A6A01AAF2679000A2ABE /* SwiftExample */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28F490201AAFBBC600C8E0CC /* Dates */,
|
||||
2847A6A31AAF2679000A2ABE /* AppDelegate.swift */,
|
||||
2847A6A71AAF2679000A2ABE /* Main.storyboard */,
|
||||
2847A6AA1AAF2679000A2ABE /* Images.xcassets */,
|
||||
2847A6AC1AAF2679000A2ABE /* LaunchScreen.xib */,
|
||||
2847A6A11AAF2679000A2ABE /* Supporting Files */,
|
||||
);
|
||||
path = SwiftExample;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2847A6A11AAF2679000A2ABE /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
2847A6A21AAF2679000A2ABE /* Info.plist */,
|
||||
2847A6C31AAF2B14000A2ABE /* SwiftExample-Bridging-Header.h */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
28F490201AAFBBC600C8E0CC /* Dates */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
28F490211AAFBBC600C8E0CC /* DatesFormViewController.swift */,
|
||||
);
|
||||
name = Dates;
|
||||
path = Examples/Dates;
|
||||
sourceTree = SOURCE_ROOT;
|
||||
};
|
||||
402AE3EC1FACD058DCF0A2D3 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
854F8DF43072D7C59CBECB68 /* libPods-SwiftExample.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
7A12A831117D9B4D152E0A51 /* Pods */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
420D9BAB7B0D2AF9487DD060 /* Pods-SwiftExample.debug.xcconfig */,
|
||||
2EB9C638FC2450A0B9786D1E /* Pods-SwiftExample.release.xcconfig */,
|
||||
);
|
||||
name = Pods;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
2847A69D1AAF2679000A2ABE /* SwiftExample */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 2847A6BD1AAF2679000A2ABE /* Build configuration list for PBXNativeTarget "SwiftExample" */;
|
||||
buildPhases = (
|
||||
21FCE00817B1AE1029F382A4 /* Check Pods Manifest.lock */,
|
||||
2847A69A1AAF2679000A2ABE /* Sources */,
|
||||
2847A69B1AAF2679000A2ABE /* Frameworks */,
|
||||
2847A69C1AAF2679000A2ABE /* Resources */,
|
||||
A0F2DA95250A4C3E69515D96 /* Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = SwiftExample;
|
||||
productName = SwiftExample;
|
||||
productReference = 2847A69E1AAF2679000A2ABE /* SwiftExample.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
2847A6961AAF2679000A2ABE /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0620;
|
||||
ORGANIZATIONNAME = Xmartlabs;
|
||||
TargetAttributes = {
|
||||
2847A69D1AAF2679000A2ABE = {
|
||||
CreatedOnToolsVersion = 6.2;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = 2847A6991AAF2679000A2ABE /* Build configuration list for PBXProject "SwiftExample" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = 2847A6951AAF2679000A2ABE;
|
||||
productRefGroup = 2847A69F1AAF2679000A2ABE /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
2847A69D1AAF2679000A2ABE /* SwiftExample */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
2847A69C1AAF2679000A2ABE /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
2847A6A91AAF2679000A2ABE /* Main.storyboard in Resources */,
|
||||
2847A6AE1AAF2679000A2ABE /* LaunchScreen.xib in Resources */,
|
||||
2847A6AB1AAF2679000A2ABE /* Images.xcassets in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
21FCE00817B1AE1029F382A4 /* Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Check Pods Manifest.lock";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
A0F2DA95250A4C3E69515D96 /* Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Copy Pods Resources";
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SwiftExample/Pods-SwiftExample-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
2847A69A1AAF2679000A2ABE /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
28F490221AAFBBC600C8E0CC /* DatesFormViewController.swift in Sources */,
|
||||
2847A6A41AAF2679000A2ABE /* AppDelegate.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
2847A6A71AAF2679000A2ABE /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
2847A6A81AAF2679000A2ABE /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
2847A6AC1AAF2679000A2ABE /* LaunchScreen.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
2847A6AD1AAF2679000A2ABE /* Base */,
|
||||
);
|
||||
name = LaunchScreen.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
2847A6BB1AAF2679000A2ABE /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2847A6BC1AAF2679000A2ABE /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
2847A6BE1AAF2679000A2ABE /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 420D9BAB7B0D2AF9487DD060 /* Pods-SwiftExample.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
INFOPLIST_FILE = SwiftExample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "SwiftExample/SwiftExample-Bridging-Header.h";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
2847A6BF1AAF2679000A2ABE /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 2EB9C638FC2450A0B9786D1E /* Pods-SwiftExample.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
INFOPLIST_FILE = SwiftExample/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "SwiftExample/SwiftExample-Bridging-Header.h";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
2847A6991AAF2679000A2ABE /* Build configuration list for PBXProject "SwiftExample" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2847A6BB1AAF2679000A2ABE /* Debug */,
|
||||
2847A6BC1AAF2679000A2ABE /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
2847A6BD1AAF2679000A2ABE /* Build configuration list for PBXNativeTarget "SwiftExample" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
2847A6BE1AAF2679000A2ABE /* Debug */,
|
||||
2847A6BF1AAF2679000A2ABE /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 2847A6961AAF2679000A2ABE /* Project object */;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:SwiftExample.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:SwiftExample.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Pods/Pods.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -1,46 +0,0 @@
|
||||
//
|
||||
// AppDelegate.swift
|
||||
// SwiftExample
|
||||
//
|
||||
// Created by Martin Barreto on 3/10/15.
|
||||
// Copyright (c) 2015 Xmartlabs. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
@UIApplicationMain
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
|
||||
|
||||
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
|
||||
// Override point for customization after application launch.
|
||||
return true
|
||||
}
|
||||
|
||||
func applicationWillResignActive(application: UIApplication) {
|
||||
// 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.
|
||||
// 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.
|
||||
}
|
||||
|
||||
func applicationDidEnterBackground(application: UIApplication) {
|
||||
// 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.
|
||||
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
|
||||
}
|
||||
|
||||
func applicationWillEnterForeground(application: UIApplication) {
|
||||
// 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.
|
||||
}
|
||||
|
||||
func applicationDidBecomeActive(application: UIApplication) {
|
||||
// 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.
|
||||
}
|
||||
|
||||
func applicationWillTerminate(application: UIApplication) {
|
||||
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207"/>
|
||||
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="iN0-l3-epB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 Xmartlabs. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
|
||||
<rect key="frame" x="20" y="439" width="441" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="SwiftExample" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
|
||||
<rect key="frame" x="20" y="140" width="441" height="43"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
|
||||
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
|
||||
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
|
||||
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
|
||||
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
|
||||
</constraints>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="548" y="455"/>
|
||||
</view>
|
||||
</objects>
|
||||
</document>
|
||||
@@ -1,82 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C109" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="Qcv-79-vVI">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--Dates-->
|
||||
<scene sceneID="tne-QT-ifu">
|
||||
<objects>
|
||||
<viewController id="BYZ-38-t0r" customClass="DatesFormViewController" customModule="SwiftExample" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" translatesAutoresizingMaskIntoConstraints="NO" id="2sg-5P-kgQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
|
||||
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
|
||||
</tableView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="2sg-5P-kgQ" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="3Yn-bA-w0I"/>
|
||||
<constraint firstAttribute="trailing" secondItem="2sg-5P-kgQ" secondAttribute="trailing" id="73f-7i-5tC"/>
|
||||
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="2sg-5P-kgQ" secondAttribute="bottom" id="j8D-ZK-VSm"/>
|
||||
<constraint firstItem="2sg-5P-kgQ" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="u4s-WS-f87"/>
|
||||
</constraints>
|
||||
<variation key="default">
|
||||
<mask key="subviews">
|
||||
<exclude reference="2sg-5P-kgQ"/>
|
||||
</mask>
|
||||
<mask key="constraints">
|
||||
<exclude reference="3Yn-bA-w0I"/>
|
||||
<exclude reference="73f-7i-5tC"/>
|
||||
<exclude reference="u4s-WS-f87"/>
|
||||
<exclude reference="j8D-ZK-VSm"/>
|
||||
</mask>
|
||||
</variation>
|
||||
<variation key="widthClass=compact">
|
||||
<mask key="subviews">
|
||||
<include reference="2sg-5P-kgQ"/>
|
||||
</mask>
|
||||
<mask key="constraints">
|
||||
<include reference="3Yn-bA-w0I"/>
|
||||
<include reference="73f-7i-5tC"/>
|
||||
<include reference="u4s-WS-f87"/>
|
||||
<include reference="j8D-ZK-VSm"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" title="Dates" id="9ob-1y-Xxj"/>
|
||||
<connections>
|
||||
<outlet property="tableView" destination="2sg-5P-kgQ" id="8ra-Jh-FFN"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1699.5" y="227"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="Rqn-ai-pbu">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="Qcv-79-vVI" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="DYY-3j-vkq">
|
||||
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="PVw-tk-bDX"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="2NC-vw-Oo6" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="936" y="227"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
</document>
|
||||
@@ -1,68 +0,0 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "2x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.xmartlabs.$(PRODUCT_NAME:rfc1034identifier)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||