pickerView显示

程序运行截图:

pickerView显示_第1张图片

 
 
ViewController.h文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

< UIPickerViewDelegate, UIPickerViewDataSource> /* 设置委托 */
{
    // 静态定义滑轮组件
    //UIPickerView *pickerView;
    
    // 储存第一个选取器的数据
    NSArray *singerData;
    
    // 储存第二个选取器
    NSArray *singData;
    
    // 读取plist文件数据
    NSDictionary *pickerDictionary;
}

@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;    // 显示滚轮

@property (strong, nonatomic) IBOutlet UILabel *label;

@end

ViewController.m文件

#import "ViewController.h"


#define SINGER_PICKER_VIEW    0
#define SING_PICKER_VIEW      1


@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    // 指定delegate
    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
    
    // 显示选中框
    self.pickerView.showsSelectionIndicator = YES;
    [self.view addSubview:self.pickerView];

    // 获取mainBundle
    NSBundle *bundle = [NSBundle mainBundle];
    
    // 获取songInfo.plist文件路径
    NSURL *songInfo = [bundle URLForResource:@"SongInfo" withExtension:@"plist"];
    
    // 把plist文件内容存入到数组
    NSDictionary *dic = [NSDictionary dictionaryWithContentsOfURL:songInfo];
    pickerDictionary = dic;
 
    // 把字典里的内容取出放到数组中
    NSArray *components = [pickerDictionary allKeys];
    
    // 选取出第一个滚轮中的值
    NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
    singerData = sorted;
    
    // 根据第一个滚轮中的值,选取第二个滚轮中的值
    NSString *selectedState = [singerData objectAtIndex:0];
    NSArray *array = [pickerDictionary objectForKey:selectedState];
    singData = array;
    
    [self showPickerList];
    
#if 0
    // 添加按钮
    CGRect frame = CGRectMake(120, 250, 80, 40);
    UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    selectButton.frame = frame;
    [selectButton setTitle:@"SELECT" forState:UIControlStateNormal];
    
    [selectButton addTarget: self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:selectButton];
#endif
}

/* 显示pickerView的内容 */
-(void) showPickerList
{
    // 获取选取器某一行索引值
    NSInteger singerRow = [self.pickerView selectedRowInComponent:SINGER_PICKER_VIEW];
    NSInteger singRow = [self.pickerView selectedRowInComponent:SING_PICKER_VIEW];
    
    // 将singerData数组中值取出
    NSString *selectedSinger = [singerData objectAtIndex:singerRow];
    NSString *selectedSing = [singData objectAtIndex:singRow];
    NSString *message = [[NSString alloc] initWithFormat:@"%@.%@", selectedSinger,selectedSing];
    
    self.label.text = message;
    
    /* 在对话框中显示 */
    //UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
    //[alert show];
}

// 两个协议代理方法的实现

#pragma mark -
#pragma mark Picker Data Source Methods


-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    // 返回几就是几个选取器
    return 2;
}

// 返回当前列显示的行数
- (NSInteger) pickerView: (UIPickerView*) pickerView
numberOfRowsInComponent:(NSInteger)component
{
    if (component == SINGER_PICKER_VIEW) {
        return [singerData count];
    }
    return [singData count];
    
}

#pragma mark Picker Delegate Methods

// 返回当前行的内容,此处是将数组中数值添加到滚动的那个显示栏
-(NSString*) pickerView:(UIPickerView*) pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (component == SINGER_PICKER_VIEW) {
        return [singerData objectAtIndex:row];
    }
    return [singData objectAtIndex:row];
}

/* 更改滑轮内容 */
-(void) pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    // 如果选取的是第一个选取器
    if (component == SINGER_PICKER_VIEW) {
        // 得到第一个选取器的当前行
        NSString *selectedState = [singerData objectAtIndex:row];
        
        // 根据从pickerDictionary字典中取出的值,选择对应的第二个中的值
        NSArray *array = [pickerDictionary objectForKey:selectedState];
        singData = array;
        [self.pickerView selectRow:0 inComponent:SING_PICKER_VIEW animated:YES];
        
        // 重新装载第二个滚轮中的值
        [self.pickerView reloadComponent:SING_PICKER_VIEW];
    }

    [self showPickerList];
}

// 设置滚轮的宽度
-(CGFloat) pickerView:(UIPickerView *) pickerView
    widthForComponent: (NSInteger) component
{
    if (component == SINGER_PICKER_VIEW) {
        return 120;
    }
    return 200;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end




你可能感兴趣的:(pickerView显示)