diff --git a/RETableViewManager/Cells/RETableViewFloatCell.h b/RETableViewManager/Cells/RETableViewFloatCell.h new file mode 100644 index 0000000..d7d56b9 --- /dev/null +++ b/RETableViewManager/Cells/RETableViewFloatCell.h @@ -0,0 +1,17 @@ +// +// RETableViewFloatCell.h +// RETableViewManagerExample +// +// Created by Roman Efimov on 4/5/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import "RETableViewCell.h" +#import "REFloatItem.h" + +@interface RETableViewFloatCell : RETableViewCell + +@property (strong, readonly, nonatomic) UISlider *sliderView; +@property (strong, readwrite, nonatomic) REFloatItem *item; + +@end diff --git a/RETableViewManager/Cells/RETableViewFloatCell.m b/RETableViewManager/Cells/RETableViewFloatCell.m new file mode 100644 index 0000000..69fde69 --- /dev/null +++ b/RETableViewManager/Cells/RETableViewFloatCell.m @@ -0,0 +1,48 @@ +// +// RETableViewFloatCell.m +// RETableViewManagerExample +// +// Created by Roman Efimov on 4/5/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import "RETableViewFloatCell.h" + +@implementation RETableViewFloatCell + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + self.selectionStyle = UITableViewCellSelectionStyleNone; + } + return self; +} + +- (void)cellDidLoad +{ + [super cellDidLoad]; + + _sliderView = [[UISlider alloc] init]; + [_sliderView addTarget:self action:@selector(sliderValueDidChanged:) forControlEvents:UIControlEventValueChanged]; + self.accessoryView = _sliderView; +} + +- (void)cellWillAppear +{ + self.textLabel.text = self.item.title; + _sliderView.value = self.item.value; + _sliderView.frame = CGRectMake(0.0, 0.0, self.item.sliderWidth, 10.0); +} + +#pragma mark - +#pragma mark UISwitch events + +- (void)sliderValueDidChanged:(UISlider *)slider +{ + self.item.value = slider.value; + if (self.item.actionBlock) + self.item.actionBlock(self.item); +} + +@end diff --git a/RETableViewManager/Items/REFloatItem.h b/RETableViewManager/Items/REFloatItem.h new file mode 100644 index 0000000..f54e9f4 --- /dev/null +++ b/RETableViewManager/Items/REFloatItem.h @@ -0,0 +1,22 @@ +// +// REFloatItem.h +// RETableViewManagerExample +// +// Created by Roman Efimov on 4/5/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import "RETableViewItem.h" + +@interface REFloatItem : RETableViewItem + +@property (assign, readwrite, nonatomic) float value; +@property (assign, readwrite, nonatomic) CGFloat sliderWidth; + ++ (id)itemWithTitle:(NSString *)title value:(float)value actionBlock:(void(^)(REFloatItem *item))actionBlock; ++ (id)itemWithTitle:(NSString *)title value:(float)value; + +- (id)initWithTitle:(NSString *)title value:(float)value actionBlock:(void(^)(REFloatItem *item))actionBlock; +- (id)initWithTitle:(NSString *)title value:(float)value; + +@end diff --git a/RETableViewManager/Items/REFloatItem.m b/RETableViewManager/Items/REFloatItem.m new file mode 100644 index 0000000..d197728 --- /dev/null +++ b/RETableViewManager/Items/REFloatItem.m @@ -0,0 +1,42 @@ +// +// REFloatItem.m +// RETableViewManagerExample +// +// Created by Roman Efimov on 4/5/13. +// Copyright (c) 2013 Roman Efimov. All rights reserved. +// + +#import "REFloatItem.h" + +@implementation REFloatItem + ++ (id)itemWithTitle:(NSString *)title value:(float)value +{ + return [[REFloatItem alloc] initWithTitle:title value:value]; +} + ++ (id)itemWithTitle:(NSString *)title value:(float)value actionBlock:(void(^)(REFloatItem *item))actionBlock +{ + return [[REFloatItem alloc] initWithTitle:title value:value actionBlock:actionBlock]; +} + +- (id)initWithTitle:(NSString *)title value:(float)value +{ + return [self initWithTitle:title value:value actionBlock:nil]; +} + +- (id)initWithTitle:(NSString *)title value:(float)value actionBlock:(void(^)(REFloatItem *item))actionBlock +{ + self = [super init]; + if (!self) + return nil; + + self.title = title; + self.value = value; + self.actionBlock = actionBlock; + self.sliderWidth = 140.0; + + return self; +} + +@end diff --git a/RETableViewManager/RETableViewManager.h b/RETableViewManager/RETableViewManager.h index 35b0d0b..7bf9527 100644 --- a/RETableViewManager/RETableViewManager.h +++ b/RETableViewManager/RETableViewManager.h @@ -38,6 +38,7 @@ #import "RETextItem.h" #import "RENumberItem.h" #import "RECreditCardItem.h" +#import "REFloatItem.h" @protocol RETableViewManagerDelegate; diff --git a/RETableViewManager/RETableViewManager.m b/RETableViewManager/RETableViewManager.m index 6a2c783..e91653c 100644 --- a/RETableViewManager/RETableViewManager.m +++ b/RETableViewManager/RETableViewManager.m @@ -63,6 +63,7 @@ [self mapObjectClass:@"REBoolItem" toTableViewCellClass:@"RETableViewBoolCell"]; [self mapObjectClass:@"RETextItem" toTableViewCellClass:@"RETableViewTextCell"]; [self mapObjectClass:@"RENumberItem" toTableViewCellClass:@"RETableViewNumberCell"]; + [self mapObjectClass:@"REFloatItem" toTableViewCellClass:@"RETableViewFloatCell"]; [self mapObjectClass:@"RECreditCardItem" toTableViewCellClass:@"RETableViewCreditCardCell"]; } diff --git a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj index 1783dbe..479ffc0 100644 --- a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj +++ b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 300E5A26170F486800910013 /* REFloatItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 300E5A25170F486800910013 /* REFloatItem.m */; }; + 300E5A29170F48EC00910013 /* RETableViewFloatCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 300E5A28170F48EC00910013 /* RETableViewFloatCell.m */; }; 302D2150170B25B10085654F /* ControlsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D214A170B25B10085654F /* ControlsViewController.m */; }; 302D2151170B25B10085654F /* ListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D214C170B25B10085654F /* ListViewController.m */; }; 302D2152170B25B10085654F /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 302D214E170B25B10085654F /* RootViewController.m */; }; @@ -43,6 +45,10 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 300E5A24170F486800910013 /* REFloatItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REFloatItem.h; sourceTree = ""; }; + 300E5A25170F486800910013 /* REFloatItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = REFloatItem.m; sourceTree = ""; }; + 300E5A27170F48EC00910013 /* RETableViewFloatCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RETableViewFloatCell.h; sourceTree = ""; }; + 300E5A28170F48EC00910013 /* RETableViewFloatCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RETableViewFloatCell.m; sourceTree = ""; }; 302D2149170B25B10085654F /* ControlsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ControlsViewController.h; sourceTree = ""; }; 302D214A170B25B10085654F /* ControlsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ControlsViewController.m; sourceTree = ""; }; 302D214B170B25B10085654F /* ListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListViewController.h; sourceTree = ""; }; @@ -199,6 +205,8 @@ 30DB065116E934AD006C9530 /* RETableViewTextCell.m */, 30F4138C170E2E820004EBAE /* RETableViewNumberCell.h */, 30F4138D170E2E820004EBAE /* RETableViewNumberCell.m */, + 300E5A27170F48EC00910013 /* RETableViewFloatCell.h */, + 300E5A28170F48EC00910013 /* RETableViewFloatCell.m */, ); path = Cells; sourceTree = ""; @@ -216,6 +224,8 @@ 30F4131A170E0F620004EBAE /* RERadioItem.m */, 30DB065B16E934AD006C9530 /* RETextItem.h */, 30DB065C16E934AD006C9530 /* RETextItem.m */, + 300E5A24170F486800910013 /* REFloatItem.h */, + 300E5A25170F486800910013 /* REFloatItem.m */, ); path = Items; sourceTree = ""; @@ -383,6 +393,8 @@ 30F41318170E07BB0004EBAE /* RETableViewOptionsController.m in Sources */, 30F4131B170E0F620004EBAE /* RERadioItem.m in Sources */, 30F4138E170E2E820004EBAE /* RETableViewNumberCell.m in Sources */, + 300E5A26170F486800910013 /* REFloatItem.m in Sources */, + 300E5A29170F48EC00910013 /* RETableViewFloatCell.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ControlsViewController.m b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ControlsViewController.m index 78976f7..d610031 100644 --- a/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ControlsViewController.m +++ b/RETableViewManagerExample/RETableViewManagerExample/Classes/Controllers/ControlsViewController.m @@ -52,6 +52,10 @@ [section addItem:[REBoolItem itemWithTitle:@"Bool item" value:YES]]; + [section addItem:[REFloatItem itemWithTitle:@"Float item" value:0.3 actionBlock:^(REFloatItem *item) { + NSLog(@"Value: %f", item.value); + }]]; + RERadioItem *optionItem = [RERadioItem itemWithTitle:@"Radio" value:@"Option 4" actionBlock:^(RERadioItem *item) { [weakSelf.tableView deselectRowAtIndexPath:item.indexPath animated:YES];