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

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...