mirror of
https://github.com/zhigang1992/RETableViewManager.git
synced 2026-04-28 12:45:34 +08:00
Add inline picker item / cell
This commit is contained in:
16
RETableViewManager/Cells/RETableViewInlinePickerCell.h
Normal file
16
RETableViewManager/Cells/RETableViewInlinePickerCell.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// RETableViewInlinePickerCell.h
|
||||
// RETableViewManagerExample
|
||||
//
|
||||
// Created by Roman Efimov on 10/5/13.
|
||||
// Copyright (c) 2013 Roman Efimov. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RETableViewCell.h"
|
||||
#import "REInlinePickerItem.h"
|
||||
|
||||
@interface RETableViewInlinePickerCell : RETableViewCell <UIPickerViewDataSource, UIPickerViewDelegate>
|
||||
|
||||
@property (strong, readwrite, nonatomic) REInlinePickerItem *item;
|
||||
|
||||
@end
|
||||
83
RETableViewManager/Cells/RETableViewInlinePickerCell.m
Normal file
83
RETableViewManager/Cells/RETableViewInlinePickerCell.m
Normal file
@@ -0,0 +1,83 @@
|
||||
//
|
||||
// RETableViewInlinePickerCell.m
|
||||
// RETableViewManagerExample
|
||||
//
|
||||
// Created by Roman Efimov on 10/5/13.
|
||||
// Copyright (c) 2013 Roman Efimov. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RETableViewInlinePickerCell.h"
|
||||
#import "REPickerItem.h"
|
||||
|
||||
@interface RETableViewInlinePickerCell ()
|
||||
|
||||
@property (strong, readwrite, nonatomic) UIPickerView *pickerView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation RETableViewInlinePickerCell
|
||||
|
||||
+ (CGFloat)heightWithItem:(RETableViewItem *)item tableViewManager:(RETableViewManager *)tableViewManager
|
||||
{
|
||||
return 216.0f;
|
||||
}
|
||||
|
||||
- (void)cellDidLoad
|
||||
{
|
||||
[super cellDidLoad];
|
||||
self.pickerView = [[UIPickerView alloc] init];
|
||||
self.pickerView.delegate = self;
|
||||
self.pickerView.dataSource = self;
|
||||
[self.contentView addSubview:self.pickerView];
|
||||
}
|
||||
|
||||
- (void)cellWillAppear
|
||||
{
|
||||
[super cellWillAppear];
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self.item.pickerItem.options enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||
if ([self.item.pickerItem.options objectAtIndex:idx] && [self.item.pickerItem.value objectAtIndex:idx] > 0)
|
||||
[self.pickerView selectRow:[[self.item.pickerItem.options objectAtIndex:idx] indexOfObject:[self.item.pickerItem.value objectAtIndex:idx]] inComponent:idx animated:NO];
|
||||
}];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark UIPickerViewDataSource
|
||||
|
||||
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
|
||||
{
|
||||
return self.item.pickerItem.options.count;
|
||||
}
|
||||
|
||||
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
|
||||
{
|
||||
return [[self.item.pickerItem.options objectAtIndex:component] count];
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark UIPickerViewDelegate
|
||||
|
||||
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
|
||||
{
|
||||
NSArray *items = [self.item.pickerItem.options objectAtIndex:component];
|
||||
return [items objectAtIndex:row];
|
||||
}
|
||||
|
||||
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
|
||||
{
|
||||
[self shouldUpdateItemValue];
|
||||
}
|
||||
|
||||
- (void)shouldUpdateItemValue
|
||||
{
|
||||
NSMutableArray *value = [NSMutableArray array];
|
||||
[self.item.pickerItem.options enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||
NSArray *options = [self.item.pickerItem.options objectAtIndex:idx];
|
||||
NSString *valueText = [options objectAtIndex:[self.pickerView selectedRowInComponent:idx]];
|
||||
[value addObject:valueText];
|
||||
}];
|
||||
self.item.pickerItem.value = [value copy];
|
||||
[self.item.pickerItem reloadRowWithAnimation:UITableViewRowAnimationNone];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -90,6 +90,10 @@
|
||||
if (!self.item.title) {
|
||||
self.valueLabel.textAlignment = NSTextAlignmentLeft;
|
||||
}
|
||||
|
||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
|
||||
self.valueLabel.textColor = self.item.inlinePickerItem ? self.tintColor : self.detailTextLabel.textColor;
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)layoutSubviews
|
||||
@@ -108,13 +112,35 @@
|
||||
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
|
||||
{
|
||||
[super setSelected:selected animated:animated];
|
||||
if (selected) {
|
||||
|
||||
if (selected && !self.item.inlineDatePicker) {
|
||||
[self.textField becomeFirstResponder];
|
||||
[self.item.options enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
|
||||
if ([self.item.options objectAtIndex:idx] && [self.item.value objectAtIndex:idx] > 0)
|
||||
[self.pickerView selectRow:[[self.item.options objectAtIndex:idx] indexOfObject:[self.item.value objectAtIndex:idx]] inComponent:idx animated:NO];
|
||||
}];
|
||||
}
|
||||
|
||||
if (selected && self.item.inlineDatePicker && !self.item.inlinePickerItem) {
|
||||
[self setSelected:NO animated:NO];
|
||||
[self.item deselectRowAnimated:NO];
|
||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 70000
|
||||
self.valueLabel.textColor = self.tintColor;
|
||||
#endif
|
||||
self.item.inlinePickerItem = [REInlinePickerItem itemWithPickerItem:self.item];
|
||||
[self.section insertItem:self.item.inlinePickerItem atIndex:self.item.indexPath.row + 1];
|
||||
[self.tableViewManager.tableView insertRowsAtIndexPaths:@[self.item.inlinePickerItem.indexPath] withRowAnimation:UITableViewRowAnimationBottom];
|
||||
} else {
|
||||
if (selected && self.item.inlineDatePicker && self.item.inlinePickerItem) {
|
||||
[self setSelected:NO animated:NO];
|
||||
[self.item deselectRowAnimated:NO];
|
||||
self.valueLabel.textColor = self.detailTextLabel.textColor;
|
||||
NSIndexPath *indexPath = [self.item.inlinePickerItem.indexPath copy];
|
||||
[self.section removeItemAtIndex:self.item.inlinePickerItem.indexPath.row];
|
||||
self.item.inlinePickerItem = nil;
|
||||
[self.tableViewManager.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (UIResponder *)responder
|
||||
|
||||
20
RETableViewManager/Items/REInlinePickerItem.h
Normal file
20
RETableViewManager/Items/REInlinePickerItem.h
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// REInlinePickerItem.h
|
||||
// RETableViewManagerExample
|
||||
//
|
||||
// Created by Roman Efimov on 10/5/13.
|
||||
// Copyright (c) 2013 Roman Efimov. All rights reserved.
|
||||
//
|
||||
|
||||
#import "RETableViewItem.h"
|
||||
|
||||
@class REPickerItem;
|
||||
|
||||
@interface REInlinePickerItem : RETableViewItem
|
||||
|
||||
@property (weak, readwrite, nonatomic) REPickerItem *pickerItem;
|
||||
|
||||
+ (instancetype)itemWithPickerItem:(REPickerItem *)pickerItem;
|
||||
- (id)initWithPickerItem:(REPickerItem *)pickerItem;
|
||||
|
||||
@end
|
||||
27
RETableViewManager/Items/REInlinePickerItem.m
Normal file
27
RETableViewManager/Items/REInlinePickerItem.m
Normal file
@@ -0,0 +1,27 @@
|
||||
//
|
||||
// REInlinePickerItem.m
|
||||
// RETableViewManagerExample
|
||||
//
|
||||
// Created by Roman Efimov on 10/5/13.
|
||||
// Copyright (c) 2013 Roman Efimov. All rights reserved.
|
||||
//
|
||||
|
||||
#import "REInlinePickerItem.h"
|
||||
|
||||
@implementation REInlinePickerItem
|
||||
|
||||
+ (instancetype)itemWithPickerItem:(REPickerItem *)pickerItem
|
||||
{
|
||||
return [[self alloc] initWithPickerItem:pickerItem];
|
||||
}
|
||||
|
||||
- (id)initWithPickerItem:(REPickerItem *)pickerItem
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
_pickerItem = pickerItem;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -24,12 +24,15 @@
|
||||
//
|
||||
|
||||
#import "RETableViewItem.h"
|
||||
#import "REInlinePickerItem.h"
|
||||
|
||||
@interface REPickerItem : RETableViewItem
|
||||
|
||||
@property (strong, readwrite, nonatomic) NSArray *options;
|
||||
@property (strong, readwrite, nonatomic) NSArray *value;
|
||||
@property (copy, readwrite, nonatomic) NSString *placeholder;
|
||||
@property (assign, readwrite, nonatomic) BOOL inlineDatePicker;
|
||||
@property (strong, readwrite, nonatomic) REInlinePickerItem *inlinePickerItem;
|
||||
|
||||
+ (instancetype)itemWithTitle:(NSString *)title value:(NSArray *)value placeholder:(NSString *)placeholder options:(NSArray *)options;
|
||||
- (id)initWithTitle:(NSString *)title value:(NSArray *)value placeholder:(NSString *)placeholder options:(NSArray *)options;
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#import "REPickerItem.h"
|
||||
#import "RESegmentedItem.h"
|
||||
#import "REInlineDatePickerItem.h"
|
||||
#import "REInlinePickerItem.h"
|
||||
|
||||
@protocol RETableViewManagerDelegate;
|
||||
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
self[@"REPickerItem"] = @"RETableViewPickerCell";
|
||||
self[@"RESegmentedItem"] = @"RETableViewSegmentedCell";
|
||||
self[@"REInlineDatePickerItem"] = @"RETableViewInlineDatePickerCell";
|
||||
self[@"REInlinePickerItem"] = @"RETableViewInlinePickerCell";
|
||||
}
|
||||
|
||||
- (void)registerClass:(NSString *)objectClass forCellWithReuseIdentifier:(NSString *)identifier
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
30939CF417949A10004D95A9 /* userpic6.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 30939CE817949A10004D95A9 /* userpic6.jpg */; };
|
||||
30B00D7A17C667A90010D439 /* ValidationsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B00D7917C667A90010D439 /* ValidationsViewController.m */; };
|
||||
30B35CEF17E54B670082CE0E /* RECommonFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B35CEE17E54B670082CE0E /* RECommonFunctions.m */; };
|
||||
30B9914B18007035007C8913 /* RETableViewInlinePickerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B9914A18007035007C8913 /* RETableViewInlinePickerCell.m */; };
|
||||
30B9914E18007045007C8913 /* REInlinePickerItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 30B9914D18007045007C8913 /* REInlinePickerItem.m */; };
|
||||
30BB805817E0D8A400AD0861 /* MultilineTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BB805717E0D8A400AD0861 /* MultilineTextCell.m */; };
|
||||
30BB805B17E0D8C300AD0861 /* XIBTestItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BB805A17E0D8C300AD0861 /* XIBTestItem.m */; };
|
||||
30BB805E17E0D8E700AD0861 /* MultilineTextItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BB805D17E0D8E700AD0861 /* MultilineTextItem.m */; };
|
||||
@@ -152,6 +154,10 @@
|
||||
30B00D7917C667A90010D439 /* ValidationsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ValidationsViewController.m; sourceTree = "<group>"; };
|
||||
30B35CED17E54AE30082CE0E /* RECommonFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RECommonFunctions.h; sourceTree = "<group>"; };
|
||||
30B35CEE17E54B670082CE0E /* RECommonFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RECommonFunctions.m; sourceTree = "<group>"; };
|
||||
30B9914918007035007C8913 /* RETableViewInlinePickerCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RETableViewInlinePickerCell.h; sourceTree = "<group>"; };
|
||||
30B9914A18007035007C8913 /* RETableViewInlinePickerCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RETableViewInlinePickerCell.m; sourceTree = "<group>"; };
|
||||
30B9914C18007045007C8913 /* REInlinePickerItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = REInlinePickerItem.h; sourceTree = "<group>"; };
|
||||
30B9914D18007045007C8913 /* REInlinePickerItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = REInlinePickerItem.m; sourceTree = "<group>"; };
|
||||
30BB805617E0D8A400AD0861 /* MultilineTextCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultilineTextCell.h; sourceTree = "<group>"; };
|
||||
30BB805717E0D8A400AD0861 /* MultilineTextCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultilineTextCell.m; sourceTree = "<group>"; };
|
||||
30BB805917E0D8C300AD0861 /* XIBTestItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XIBTestItem.h; sourceTree = "<group>"; };
|
||||
@@ -394,6 +400,8 @@
|
||||
30DBFA9317FC84380099ACA5 /* RETableViewPickerCell.m */,
|
||||
3014617717FF1F6F000590A7 /* RETableViewInlineDatePickerCell.h */,
|
||||
3014617817FF1F6F000590A7 /* RETableViewInlineDatePickerCell.m */,
|
||||
30B9914918007035007C8913 /* RETableViewInlinePickerCell.h */,
|
||||
30B9914A18007035007C8913 /* RETableViewInlinePickerCell.m */,
|
||||
);
|
||||
path = Cells;
|
||||
sourceTree = "<group>";
|
||||
@@ -425,6 +433,8 @@
|
||||
30DBFA9017FC827D0099ACA5 /* REPickerItem.m */,
|
||||
3014617A17FF1F8B000590A7 /* REInlineDatePickerItem.h */,
|
||||
3014617B17FF1F8B000590A7 /* REInlineDatePickerItem.m */,
|
||||
30B9914C18007045007C8913 /* REInlinePickerItem.h */,
|
||||
30B9914D18007045007C8913 /* REInlinePickerItem.m */,
|
||||
);
|
||||
path = Items;
|
||||
sourceTree = "<group>";
|
||||
@@ -669,11 +679,13 @@
|
||||
30D208641718FFDE00144E46 /* REMultipleChoiceItem.m in Sources */,
|
||||
30E16A48171A103400F7C258 /* EditingViewController.m in Sources */,
|
||||
30D74554174EB4CA00D4C7C1 /* RETableViewOptionCell.m in Sources */,
|
||||
30B9914E18007045007C8913 /* REInlinePickerItem.m in Sources */,
|
||||
3008EB1C17ECEB8B005D36D9 /* NSString+RETableViewManagerAdditions.m in Sources */,
|
||||
30D9566C175E3C0200AB977E /* RetractableViewController.m in Sources */,
|
||||
30FE4147176A306600F317B8 /* StylingViewController.m in Sources */,
|
||||
303D966B17B7CCF800A418F3 /* XIBTestCell.m in Sources */,
|
||||
303D967217B7CDE300A418F3 /* XIBTestViewController.m in Sources */,
|
||||
30B9914B18007035007C8913 /* RETableViewInlinePickerCell.m in Sources */,
|
||||
30E5F50C17BBD163005CF1FE /* IndexedListViewController.m in Sources */,
|
||||
30BB805B17E0D8C300AD0861 /* XIBTestItem.m in Sources */,
|
||||
30B00D7A17C667A90010D439 /* ValidationsViewController.m in Sources */,
|
||||
|
||||
@@ -119,6 +119,13 @@
|
||||
NSLog(@"Value: %@", item.value.description);
|
||||
};
|
||||
self.pickerItem = [REPickerItem itemWithTitle:@"Picker" value:@[@"Item 12", @"Item 23"] placeholder:nil options:@[@[@"Item 11", @"Item 12", @"Item 13"], @[@"Item 21", @"Item 22", @"Item 23", @"Item 24"]]];
|
||||
|
||||
// Use inline picker in iOS 7
|
||||
//
|
||||
if (REUIKitIsFlatMode()) {
|
||||
self.pickerItem.inlineDatePicker = YES;
|
||||
}
|
||||
|
||||
self.radioItem = [RERadioItem itemWithTitle:@"Radio" value:@"Option 4" selectionHandler:^(RERadioItem *item) {
|
||||
[item deselectRowAnimated:YES]; // same as [weakSelf.tableView deselectRowAtIndexPath:item.indexPath animated:YES];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user