forked from escoz/QuickDialog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQPickerTableViewCell.m
152 lines (119 loc) · 4.64 KB
/
QPickerTableViewCell.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//
// QPickerTableViewCell.m
// QuickDialog
//
// Created by HiveHicks on 05.04.12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "QPickerTableViewCell.h"
#import "QuickDialog.h"
#import "QPickerElement.h"
NSString * const QPickerTableViewCellIdentifier = @"QPickerTableViewCell";
@interface QPickerTableViewCell ()
@property (nonatomic, readonly) QPickerElement *pickerElement;
@end
@implementation QPickerTableViewCell
@synthesize pickerView = _pickerView;
- (QPickerTableViewCell *)init
{
if ((self = [self initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:QPickerTableViewCellIdentifier]))
{
[self createSubviews];
self.selectionStyle = UITableViewCellSelectionStyleBlue;
}
return self;
}
- (void)createSubviews
{
[super createSubviews];
_textField.hidden = YES;
}
- (QPickerElement *)pickerElement
{
return (QPickerElement *)_entryElement;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[super textFieldDidEndEditing:textField];
self.selected = NO;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[_pickerView sizeToFit];
_textField.inputView = _pickerView;
if (self.pickerElement.value != nil) {
[self setPickerViewValue:self.pickerElement.value];
}
[super textFieldDidBeginEditing:textField];
self.selected = YES;
}
- (void)prepareForElement:(QEntryElement *)element inTableView:(QuickDialogTableView *)tableView pickerView:(UIPickerView **)pickerView
{
[self prepareForElement:element inTableView:tableView];
_pickerView = [[UIPickerView alloc] init];
_pickerView.showsSelectionIndicator = YES;
_pickerView.dataSource = self;
_pickerView.delegate = self;
*pickerView = _pickerView;
}
- (void)prepareForElement:(QEntryElement *)element inTableView:(QuickDialogTableView *)tableView
{
[super prepareForElement:element inTableView:tableView];
QPickerElement *pickerElement = (QPickerElement *)element;
if ([pickerElement.valueParser respondsToSelector:@selector(presentationOfObject:)]) {
self.detailTextLabel.text = [pickerElement.valueParser presentationOfObject:pickerElement.value];
_textField.text = [pickerElement.valueParser presentationOfObject:pickerElement.value];
} else {
self.detailTextLabel.text = [pickerElement.value description];
_textField.text = [pickerElement.value description];
}
[self setNeedsLayout];
}
#pragma mark - UIPickerView data source and delegate
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return self.pickerElement.items.count;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [[self.pickerElement.items objectAtIndex:(NSUInteger) component] count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [[[self.pickerElement.items objectAtIndex:(NSUInteger) component] objectAtIndex:(NSUInteger) row] description];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
self.pickerElement.value = [self getPickerViewValue];
[self prepareForElement:_entryElement inTableView:_quickformTableView];
[self.pickerElement handleEditingChanged];
}
#pragma mark - Getting/setting value from UIPickerView
- (id)getPickerViewValue
{
NSMutableArray *componentsValues = [NSMutableArray array];
for (int i = 0; i < _pickerView.numberOfComponents; i++)
{
NSInteger rowIndex = [_pickerView selectedRowInComponent:i];
if (rowIndex >= 0) {
[componentsValues addObject:[self pickerView:_pickerView titleForRow:rowIndex forComponent:i]];
} else {
[componentsValues addObject:[NSNull null]];
}
}
NSLog(@"AA%@", [self.pickerElement.valueParser objectFromComponentsValues:componentsValues]);
return [self.pickerElement.valueParser objectFromComponentsValues:componentsValues];
}
- (void)setPickerViewValue:(id)value
{
NSArray *componentsValues = [self.pickerElement.valueParser componentsValuesFromObject:value];
for (int componentIndex = 0; componentIndex < componentsValues.count && componentIndex < _pickerView.numberOfComponents; componentIndex++)
{
id componentValue = [componentsValues objectAtIndex:(NSUInteger) componentIndex];
NSInteger rowIndex = [[self.pickerElement.items objectAtIndex:componentIndex] indexOfObject:componentValue];
if (rowIndex != NSNotFound) {
[_pickerView selectRow:rowIndex inComponent:componentIndex animated:YES];
}
}
}
@end