FormKit.m is a library that helps building forms with a table view.
It also handles synchronization of data between your model and the view (cells) when the user makes edits.
Everything looks good on iPhone and iPad for iOS versions 6+.
Copy FormKit dir into your project.
Or with CocoaPods
pod 'FormKit.m'
self.formModel = [FKFormModel formTableModelForTableView:self.tableView navigationController:self.navigationController];
self.formModel.labelTextColor = [UIColor blackColor];
self.formModel.valueTextColor = [UIColor lightGrayColor];
[FKFormMapping mappingForClass:[Movie class] block:^(FKFormMapping *mapping) {
[mapping sectionWithTitle:@"Information section" identifier:@"info"];
[mapping mapAttribute:@"title" title:@"Title" type:FKFormAttributeMappingTypeText];
[mapping mapAttribute:@"releaseDate" title:@"ReleaseDate" type:FKFormAttributeMappingTypeDate];
[mapping mapAttribute:@"suitAllAges" title:@"All ages" type:FKFormAttributeMappingTypeBoolean];
// Read-only field
[mapping mapAttribute:@"shortName" title:@"ShortName" type:FKFormAttributeMappingTypeLabel];
[mapping mapAttribute:@"numberOfActor" title:@"Number of actor" type:FKFormAttributeMappingTypeInteger];
[mapping mapAttribute:@"content" title:@"Content" type:FKFormAttributeMappingTypeBigText];
// Select fields using a picker or pushing a selection view controller
[mapping mapAttribute:@"choice"
title:@"Choices"
showInPicker:NO
selectValuesBlock:^NSArray *(id value, id object, NSInteger *selectedValueIndex){
*selectedValueIndex = 1;
return [NSArray arrayWithObjects:@"choice1", @"choice2", nil];
} valueFromSelectBlock:^id(id value, id object, NSInteger selectedValueIndex) {
return value;
} labelValueBlock:^id(id value, id object) {
return value;
}];
[mapping buttonSave:@"Save" handler:^{
}];
[self.formModel registerMapping:mapping];
}];
[self.formModel loadFieldsWithObject:movie];
[formMapping validationForAttribute:@"title" validBlock:^BOOL(NSString *value, id object) {
return value.length < 10;
} errorMessageBlock:^NSString *(id value, id object) {
return @"Text is too long.";
}];
Bruno Wernimont
- Twitter - @brunowernimont
- Reiner Pittinger - @rpitting