CustomPicker.m 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //
  2. // CustomPicker.m
  3. // JasonDevelop
  4. //
  5. // Created by Jason Lee on 10/27/14.
  6. // Copyright (c) jasondevelop. All rights reserved.
  7. //
  8. #import "CommonUtil.h"
  9. #import "UIViewController-ActionSheetSimulation.h"
  10. #import "CustomPicker.h"
  11. #define kfToolBarHeight 44.0f
  12. #define kUIBtnTintColor [UIColor whiteColor]
  13. @interface CustomPicker () <UIPickerViewDataSource, UIPickerViewDelegate> {
  14. @protected
  15. UIToolbar *_actionToolbar;
  16. UIView *_simulatedActionSheetView;
  17. UIPickerView *_pickerView;
  18. NSInteger _selectedRow;
  19. }
  20. @end
  21. @implementation CustomPicker
  22. - (id)selectedTitle {
  23. NSInteger row = [_pickerView selectedRowInComponent:0];
  24. return [_dataDict keyAtIndex:(NSInteger)row];
  25. }
  26. - (id)selectedValue {
  27. NSInteger row = [_pickerView selectedRowInComponent:0];
  28. return [_dataDict objectAtIndex:(NSInteger)row];
  29. }
  30. //- (void)setSelectedValue:(id)selectedValue {
  31. //
  32. // BOOL isValueStringType = [selectedValue isKindOfClass:[NSString class]]; //스트링이 아니면, NSNumber
  33. // NSString *selectedKey = nil;
  34. // NSInteger row = 0;
  35. // for (NSObject *object in _dataDict.allValues) {
  36. // if (isValueStringType) {
  37. // NSString *value = (NSString *)object;
  38. // if ([value isEqualToString:selectedValue]) {
  39. // break;
  40. // }
  41. // } else {
  42. // NSNumber *value = (NSNumber *)object;
  43. // if ([value isEqualToNumber:selectedValue]) {
  44. // break;
  45. // }
  46. // }
  47. // row++;
  48. // }
  49. // [_pickerView selectRow:row inComponent:0 animated:YES];
  50. // selectedKey = [_dataDict keyAtIndex:(NSInteger)row];
  51. // [self setTitle:selectedKey forState:UIControlStateNormal];
  52. //}
  53. #pragma mark - UIActionSheet Delegate
  54. - (void)presentPicker {
  55. [self showPicker];
  56. }
  57. - (void)generateActionSheet {
  58. if (_pickerView)
  59. return;
  60. //피커뷰를 만듬.
  61. _pickerView = [[UIPickerView alloc] init];
  62. _pickerView.dataSource = self;
  63. _pickerView.delegate = self;
  64. _pickerView.showsSelectionIndicator = YES;
  65. UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"취소" style:UIBarButtonItemStylePlain target:self action:@selector(pickerCancelPressed:)];
  66. UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
  67. UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
  68. fixedSpace.width = 10;
  69. UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"선택" style:UIBarButtonItemStylePlain target:self action:@selector(pickerDonePressed:)];
  70. if (IOS_VERSION >= 7.0f) {
  71. cancelButton.tintColor = kUIBtnTintColor;
  72. doneBtn.tintColor = kUIBtnTintColor;
  73. }
  74. CGFloat width = [UIScreen mainScreen].bounds.size.width;
  75. _actionToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, width, kfToolBarHeight)];
  76. _actionToolbar.backgroundColor = [UIColor blackColor];
  77. _actionToolbar.barStyle = IOS_VERSION >= 7.0f ? UIBarStyleDefault : UIBarStyleBlackTranslucent;
  78. [_actionToolbar setItems:[NSArray arrayWithObjects:fixedSpace, cancelButton, flexSpace, doneBtn, fixedSpace, nil] animated:YES];
  79. _simulatedActionSheetView = [[CommonUtil currentViewController] actionSheetSimulationWithPickerView:_pickerView withToolbar:_actionToolbar];
  80. }
  81. - (void)showPicker {
  82. if (!_simulatedActionSheetView) {
  83. [self generateActionSheet];
  84. }
  85. [[CommonUtil currentViewController] showActionSheetSimulation:_simulatedActionSheetView pickerView:_pickerView withToolbar:_actionToolbar];
  86. }
  87. - (void)pickerDonePressed:(id)sender {
  88. [[CommonUtil currentViewController] dismissActionSheetSimulation:_simulatedActionSheetView];
  89. NSInteger row = [_pickerView selectedRowInComponent:0];
  90. // NSString *string = [_dataDict keyAtIndex:(NSInteger)row];
  91. if ([_delegate respondsToSelector:@selector(didChangedSelectRow:)]) {
  92. [_delegate didChangedSelectRow:row];
  93. }
  94. }
  95. - (void)pickerCancelPressed:(id)sender {
  96. [[CommonUtil currentViewController] dismissActionSheetSimulation:_simulatedActionSheetView];
  97. }
  98. #pragma mark - UIPickerViewDelegate
  99. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
  100. return 1;
  101. }
  102. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
  103. return _dataDict.count;
  104. }
  105. - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
  106. NSString *string = [_dataDict keyAtIndex:(NSInteger)row];
  107. return string;
  108. }
  109. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
  110. // NSString *string = [_dataDict keyAtIndex:(NSInteger)row];
  111. // [self setTitle:string forState:UIControlStateNormal];
  112. // [self setTitleColor:kUITextColor01 forState:UIControlStateNormal];
  113. }
  114. @end