123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //
- // XLFormPickerCell.m
- // XLForm ( https://github.com/xmartlabs/XLForm )
- //
- // Copyright (c) 2015 Xmartlabs ( http://xmartlabs.com )
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to deal
- // in the Software without restriction, including without limitation the rights
- // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- // copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- // THE SOFTWARE.
- #import "UIView+XLFormAdditions.h"
- #import "XLFormPickerCell.h"
- #import "NCBridgeSwift.h"
- @interface XLFormPickerCell() <UIPickerViewDelegate, UIPickerViewDataSource>
- @end
- @implementation XLFormPickerCell
- @synthesize pickerView = _pickerView;
- @synthesize inlineRowDescriptor = _inlineRowDescriptor;
- -(BOOL)formDescriptorCellCanBecomeFirstResponder
- {
- return (!self.rowDescriptor.isDisabled && (self.inlineRowDescriptor == nil));
- }
- -(BOOL)formDescriptorCellBecomeFirstResponder
- {
- return [self becomeFirstResponder];
- }
- -(BOOL)canResignFirstResponder
- {
- return YES;
- }
- -(BOOL)canBecomeFirstResponder
- {
- return [self formDescriptorCellCanBecomeFirstResponder];
- }
- #pragma mark - Properties
- -(UIPickerView *)pickerView
- {
- if (_pickerView) return _pickerView;
- _pickerView = [UIPickerView autolayoutView];
- _pickerView.delegate = self;
- _pickerView.dataSource = self;
- return _pickerView;
- }
- #pragma mark - XLFormDescriptorCell
- -(void)configure
- {
- [super configure];
- [self.contentView addSubview:self.pickerView];
- [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.pickerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.contentView attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
- [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[pickerView]-0-|" options:0 metrics:0 views:@{@"pickerView" : self.pickerView}]];
- }
- -(void)update
- {
- [super update];
- BOOL isDisable = self.rowDescriptor.isDisabled;
- self.userInteractionEnabled = !isDisable;
- self.contentView.alpha = isDisable ? 0.5 : 1.0;
- [self.pickerView selectRow:[self selectedIndex] inComponent:0 animated:NO];
- [self.pickerView reloadAllComponents];
-
- }
- +(CGFloat)formDescriptorCellHeightForRowDescriptor:(XLFormRowDescriptor *)rowDescriptor
- {
- return 216.0f;
- }
- #pragma mark - UIPickerViewDelegate
- //TWS
- - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
- {
- [[pickerView.subviews objectAtIndex:1] setHidden:TRUE];
- [[pickerView.subviews objectAtIndex:2] setHidden:TRUE];
-
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 50)];
- label.backgroundColor = [UIColor clearColor];
- label.textColor = NCBrandColor.sharedInstance.textView;
- label.font = [UIFont systemFontOfSize:13];
- label.textAlignment = NSTextAlignmentCenter;
- [label setText:[self.rowDescriptor.selectorOptions objectAtIndex:row]];
-
- return label;
- }
- - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
- {
- if (self.inlineRowDescriptor){
- if (self.inlineRowDescriptor.valueTransformer){
- NSAssert([self.inlineRowDescriptor.valueTransformer isSubclassOfClass:[NSValueTransformer class]], @"valueTransformer is not a subclass of NSValueTransformer");
- NSValueTransformer * valueTransformer = [self.inlineRowDescriptor.valueTransformer new];
- NSString * tranformedValue = [valueTransformer transformedValue:[[self.inlineRowDescriptor.selectorOptions objectAtIndex:row] valueData]];
- if (tranformedValue){
- return tranformedValue;
- }
- }
- return [[self.inlineRowDescriptor.selectorOptions objectAtIndex:row] displayText];
- }
-
- if (self.rowDescriptor.valueTransformer){
- NSAssert([self.rowDescriptor.valueTransformer isSubclassOfClass:[NSValueTransformer class]], @"valueTransformer is not a subclass of NSValueTransformer");
- NSValueTransformer * valueTransformer = [self.rowDescriptor.valueTransformer new];
- NSString * tranformedValue = [valueTransformer transformedValue:[[self.rowDescriptor.selectorOptions objectAtIndex:row] valueData]];
- if (tranformedValue){
- return tranformedValue;
- }
- }
- return [[self.rowDescriptor.selectorOptions objectAtIndex:row] displayText];
- }
- - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
- {
- if (self.inlineRowDescriptor){
- self.inlineRowDescriptor.value = [self.inlineRowDescriptor.selectorOptions objectAtIndex:row];
- [self.formViewController updateFormRow:self.inlineRowDescriptor];
- }
- else{
- [self becomeFirstResponder];
- self.rowDescriptor.value = [self.rowDescriptor.selectorOptions objectAtIndex:row];
- }
- }
- #pragma mark - UIPickerViewDataSource
- - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- {
- return 1;
- }
- - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- {
- if (self.inlineRowDescriptor){
- return self.inlineRowDescriptor.selectorOptions.count;
- }
- return self.rowDescriptor.selectorOptions.count;
- }
- #pragma mark - helpers
- -(NSInteger)selectedIndex
- {
- XLFormRowDescriptor * formRow = self.inlineRowDescriptor ?: self.rowDescriptor;
- if (formRow.value){
- for (id option in formRow.selectorOptions){
- if ([[option valueData] isEqual:[formRow.value valueData]]){
- return [formRow.selectorOptions indexOfObject:option];
- }
- }
- }
- return -1;
- }
- @end
|