PickView简单的依赖

#import "YXDependentComponentPickerViewController.h"

#define kStateComponent 0
#define kZipComponent 1

@interface YXDependentComponentPickerViewController () <UIPickerViewDataSource,UIPickerViewDelegate>

@property (weak, nonatomic) IBOutlet UIPickerView *DependentPicker;

- (IBAction)buttonPress:(UIButton *)sender;

/** <#type#>*/
@property (nonatomic,strong) NSDictionary *stateZip; // dict
/** <#type#>*/
@property (nonatomic,strong) NSArray *states; // keys
/** <#type#>*/
@property (nonatomic,strong) NSArray *zips; // values


// 字典中包含n个数组

// stateZip allKeys - > states
// stateZip  key -> value : states

@end

@implementation YXDependentComponentPickerViewController

- (NSArray *)states {
    if (_states == nil) {
        
        NSMutableArray *keyTmp = [[NSMutableArray alloc] init];
        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
        
        for (int i = 0; i < 26; i++) {
            
            char ch = 'A' + i;
            NSString *key = [NSString stringWithFormat:@"%c",ch];
            [keyTmp addObject:key];
            NSMutableArray *tmpArr = [[NSMutableArray alloc] init];
            
            for (int j = 0; j < 10; j++) {
                [tmpArr addObject:[NSString stringWithFormat:@"%@---%d",key,j]];
            }
            [dict setObject:tmpArr forKey:key];
            
        }
        self.stateZip = dict;
        self.states = keyTmp;
    }
    
    return _states;
}



- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *selectedState = self.states[0]; // 字典中第1个key -- A
    self.zips = self.stateZip[selectedState];
}

- (IBAction)buttonPress:(UIButton *)sender {
    
    // 根据位置获取数据
    NSInteger stateRow = [self.DependentPicker selectedRowInComponent:kStateComponent];
    NSInteger zipRow = [self.DependentPicker selectedRowInComponent:kZipComponent];
    
    NSString *state = self.states[stateRow];
    NSString *zip = self.zips[zipRow];
    
    NSString *title = [[NSString alloc] initWithFormat:@"You selected zip code %@", zip];
    NSString *message = [[NSString alloc] initWithFormat:@"%@ is in %@", zip,state];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alertView show];
}

#pragma mark -
#pragma mark picker data source methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    
    if (component == kStateComponent) {
        return self.states.count;
    }
    return self.zips.count;
}

#pragma mark picker delegate methods
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    
    if (component == kStateComponent) {
        return [self.states objectAtIndex:row];
    } return self.zips[row];
}

/**
 *  只要选择器的选择发生了变化,就会调用这个方法,在这个方法中检查component参数可以知道发生变化的是否是左侧的滚轮,如果确实是左侧的滚轮发生了变化,那么右侧的内容也会跟着发生变化。
 *
 */
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    
    if (component == kStateComponent) {
        NSString *selectedState = self.states[row];
        self.zips = self.stateZip[selectedState];
        [self.DependentPicker reloadComponent:kZipComponent];
        //        [self.DependentPicker reloadAllComponents];
        [self.DependentPicker selectRow:0 inComponent:kZipComponent animated:YES];
    }
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    
    if (component == kZipComponent) {
        return 90.0f;
    }
    return 200.f;
}

@end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值