天天看點

UIPickerView基本用法

UIPickerView不僅可以将UIDatePicker作為其選項,還可以将各種字元串、各種UIView的子類追加到UIPickerView中

1、基本用法:

#import "ViewController.h"

@interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    
    UIPickerView * pickerView = [[UIPickerView alloc] init];
    pickerView.dataSource = self;
    pickerView.delegate = self;
    [self.view addSubview:pickerView];
    pickerView.frame = CGRectMake(50, 100, 300, 200);
    pickerView.backgroundColor = [UIColor grayColor];
    
    
}




#pragma mark --
#pragma mark UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    //傳回列
    return 4;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    //傳回行
    return 20;
}

#pragma mark UIPickerViewDelegate
//傳回需要顯示的字元
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [NSString stringWithFormat:@"%ld-%ld", (long)row, (long)component];
}
           
UIPickerView基本用法

2、擷取選擇行的資訊:

#pragma mark UIPickerViewDelegate

//每次任何一列停止滾動就調用此方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    NSInteger c0 = [pickerView selectedRowInComponent:0];
    NSInteger c1 = [pickerView selectedRowInComponent:1];
    NSInteger c2 = [pickerView selectedRowInComponent:2];
    NSInteger c3 = [pickerView selectedRowInComponent:3];
    NSString * str = [NSString stringWithFormat:@"%li-%li-%li-%li", (long)c0, (long)c1, (long)c2, (long)c3];
    NSLog(@"%@", str);
}
           

輸出:

2015-11-30 12:55:37.225 07-uipickerView[2741:48628] 3-0-0-0
2015-11-30 12:58:41.227 07-uipickerView[2741:48628] 3-6-0-0
2015-11-30 12:58:45.161 07-uipickerView[2741:48628] 3-6-10-0
2015-11-30 12:58:48.923 07-uipickerView[2741:48628] 3-6-10-8
           

3、追加UIView

#import "ViewController.h"

@interface ViewController () <UIPickerViewDataSource, UIPickerViewDelegate>
{
    UIPickerView * _pickerView;
    NSArray * _dataSource;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    
    _pickerView = [[UIPickerView alloc] init];
    _pickerView.dataSource = self;
    _pickerView.delegate = self;
    [self.view addSubview:_pickerView];
    _pickerView.frame = CGRectMake(50, 100, 300, 200);
    _pickerView.backgroundColor = [UIColor grayColor];
    
    _pickerView.showsSelectionIndicator = YES; //明确選中的行
    
    
    UIImage * image1 = [UIImage imageNamed:@"wallpaper_01.jpg"];
    UIImage * image2 = [UIImage imageNamed:@"wallpaper_02.jpg"];
    UIImage * image3 = [UIImage imageNamed:@"wallpaper_03.jpg"];
    UIImage * image4 = [UIImage imageNamed:@"wallpaper_04.jpg"];
    NSArray * array1 = @[image1, image2, image3, image4];
    NSArray * array2 = @[image1, image2, image3, image4];
    NSArray * array3 = @[image1, image2, image3, image4];
    _dataSource = @[array1, array2, array3];
}




#pragma mark --
#pragma mark UIPickerViewDataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    //傳回列
    return 3;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    //傳回行
    return 4;
}

#pragma mark UIPickerViewDelegate

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UIImageView * imageView = (UIImageView *) view;
    if (!imageView) {
        UIImage * image = _dataSource[component][row];
        imageView = [[UIImageView alloc] initWithImage:image];
    }
    return imageView;
}
           

圖檔搞的太小了,看的有點不清:

UIPickerView基本用法
- (nullable UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component;
           

可以用此方法得到目前選擇行中的UIView

4、傳回選擇行的每個UIView的高和寬

#pragma mark UIPickerViewDelegate
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    //列寬度
    if (component == 0) {
        return 150;
    }else {
        return 75;
    }
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
    return 70;
}
           
UIPickerView基本用法