diff --git a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj index 83e5782..0160865 100644 --- a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj +++ b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj @@ -45,6 +45,7 @@ 30B00D6117C56EEF0010D439 /* REEmailValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B00D5917C56EEF0010D439 /* REEmailValidator.m */; }; 30B00D6217C56EEF0010D439 /* RELengthValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B00D5B17C56EEF0010D439 /* RELengthValidator.m */; }; 30B00D6317C56EEF0010D439 /* REPresenceValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B00D5D17C56EEF0010D439 /* REPresenceValidator.m */; }; + 30B00D7A17C667A90010D439 /* ValidationsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B00D7917C667A90010D439 /* ValidationsViewController.m */; }; 30D1C7D617AC08F4001F731C /* First_Alt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 30D1C7D217AC08F3001F731C /* First_Alt@2x.png */; }; 30D1C7D717AC08F4001F731C /* Last_Alt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 30D1C7D317AC08F3001F731C /* Last_Alt@2x.png */; }; 30D1C7D817AC08F4001F731C /* Middle_Alt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 30D1C7D417AC08F3001F731C /* Middle_Alt@2x.png */; }; @@ -153,6 +154,8 @@ 30B00D5B17C56EEF0010D439 /* RELengthValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RELengthValidator.m; sourceTree = ""; }; 30B00D5C17C56EEF0010D439 /* REPresenceValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REPresenceValidator.h; sourceTree = ""; }; 30B00D5D17C56EEF0010D439 /* REPresenceValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = REPresenceValidator.m; sourceTree = ""; }; + 30B00D7817C667A90010D439 /* ValidationsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidationsViewController.h; sourceTree = ""; }; + 30B00D7917C667A90010D439 /* ValidationsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ValidationsViewController.m; sourceTree = ""; }; 30D1C7D217AC08F3001F731C /* First_Alt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "First_Alt@2x.png"; path = "Resources/First_Alt@2x.png"; sourceTree = ""; }; 30D1C7D317AC08F3001F731C /* Last_Alt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Last_Alt@2x.png"; path = "Resources/Last_Alt@2x.png"; sourceTree = ""; }; 30D1C7D417AC08F3001F731C /* Middle_Alt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Middle_Alt@2x.png"; path = "Resources/Middle_Alt@2x.png"; sourceTree = ""; }; @@ -268,6 +271,8 @@ 303D967117B7CDE300A418F3 /* XIBTestViewController.m */, 30E5F50A17BBD163005CF1FE /* IndexedListViewController.h */, 30E5F50B17BBD163005CF1FE /* IndexedListViewController.m */, + 30B00D7817C667A90010D439 /* ValidationsViewController.h */, + 30B00D7917C667A90010D439 /* ValidationsViewController.m */, ); path = Controllers; sourceTree = ""; @@ -645,6 +650,7 @@ 30B00D6117C56EEF0010D439 /* REEmailValidator.m in Sources */, 30B00D6217C56EEF0010D439 /* RELengthValidator.m in Sources */, 30B00D6317C56EEF0010D439 /* REPresenceValidator.m in Sources */, + 30B00D7A17C667A90010D439 /* ValidationsViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/RootViewController.m b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/RootViewController.m index 01b03a2..290ed74 100644 --- a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/RootViewController.m +++ b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/RootViewController.m @@ -14,6 +14,7 @@ #import "StylingViewController.h" #import "XIBTestViewController.h" #import "IndexedListViewController.h" +#import "ValidationsViewController.h" @interface RootViewController () @@ -71,6 +72,11 @@ [item deselectRowAnimated:YES]; [weakSelf.navigationController pushViewController:[[IndexedListViewController alloc] initWithStyle:UITableViewStylePlain] animated:YES]; }]]; + + [section addItem:[RETableViewItem itemWithTitle:@"Validations" accessoryType:UITableViewCellAccessoryDisclosureIndicator selectionHandler:^(RETableViewItem *item) { + [item deselectRowAnimated:YES]; + [weakSelf.navigationController pushViewController:[[ValidationsViewController alloc] initWithStyle:UITableViewStyleGrouped] animated:YES]; + }]]; } @end diff --git a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.h b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.h new file mode 100644 index 0000000..0762806 --- /dev/null +++ b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.h @@ -0,0 +1,16 @@ +// +// ValidationsViewController.h +// RETableViewManagerExample +// +// Created by Roman Efimov on 8/22/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import +#import "RETableViewManager.h" + +@interface ValidationsViewController : UITableViewController + +@property (strong, readonly, nonatomic) RETableViewManager *manager; + +@end diff --git a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.m b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.m new file mode 100644 index 0000000..11c06ed --- /dev/null +++ b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ValidationsViewController.m @@ -0,0 +1,68 @@ +// +// ValidationsViewController.m +// RETableViewManagerExample +// +// Created by Roman Efimov on 8/22/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import "ValidationsViewController.h" + +@interface ValidationsViewController () + +@property (strong, readwrite, nonatomic) RETextItem *textItem; +@property (strong, readwrite, nonatomic) RETextItem *emailItem; + +@end + +@implementation ValidationsViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.title = @"Controls"; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Validate" style:UIBarButtonItemStyleBordered target:self action:@selector(validateButtonPressed:)]; + + // Create manager + // + _manager = [[RETableViewManager alloc] initWithTableView:self.tableView]; + + // Add a section + // + RETableViewSection *section = [RETableViewSection sectionWithHeaderTitle:@"Basic controls"]; + [_manager addSection:section]; + + // Add items + // + self.textItem = [RETextItem itemWithTitle:@"Text" value:@"" placeholder:@"Text item"]; + self.textItem.validators = @[@"presence", @"length(3, 10)"]; + + self.emailItem = [RETextItem itemWithTitle:@"Email" value:@"" placeholder:@"Email item"]; + self.emailItem.name = @"Your email"; + self.emailItem.keyboardType = UIKeyboardTypeEmailAddress; + self.emailItem.autocapitalizationType = UITextAutocapitalizationTypeNone; + self.emailItem.validators = @[@"presence", @"email"]; + + [section addItem:self.textItem]; + [section addItem:self.emailItem]; +} + +#pragma mark - +#pragma mark Button actions + +- (void)validateButtonPressed:(UIButton *)sender +{ + if (self.manager.errors) { + NSMutableArray *errors = [NSMutableArray array]; + for (NSError *error in self.manager.errors) { + [errors addObject:error.localizedDescription]; + } + NSString *errorString = [errors componentsJoinedByString:@"\n"]; + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Errors" message:errorString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; + [alert show]; + } else { + NSLog(@"All good, no errors!"); + } +} + +@end diff --git a/RETableViewManagerExample/Vendor/REValidation/REValidator.m b/RETableViewManagerExample/Vendor/REValidation/REValidator.m index 84b8034..55d01b5 100644 --- a/RETableViewManagerExample/Vendor/REValidation/REValidator.m +++ b/RETableViewManagerExample/Vendor/REValidation/REValidator.m @@ -61,9 +61,3 @@ } @end -ring *)string -{ - return nil; -} - -@end