微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/javaschema/284417.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐