iOS自定义的PickView

由两个文件

1、XDPickView.h
2、ViewController.h

下边上代码

1.1 
//
//  XDPickView.h
//  HEAL
//
//  Created by 窦心东 on 2017/3/29.
//  Copyright © 2017年 窦心东. All rights reserved.
//

#import 
@protocol XDPickerDelegate 
@required
/**
 * 选择的选项的代理方法  必须实现
 */
- (void)PickerSelectorIndixString:(NSString *)str;

@end

@interface XDPickView : UIView

@property (nonatomic,assign)iddelegate;

/** 数据源数组 */
@property (nonatomic,strong) NSMutableArray *pickViewTextArray;

/** pickview的背景颜色 */
@property (nonatomic,strong) UIColor *backgroundColor;

/** 文字的颜色 */
@property (nonatomic,strong) UIColor *contentTextColor;

/** 列宽 */
@property (nonatomic,assign) CGFloat LieWidth;

//默认选择的哪一个
- (void)MoRenSelectedRowWithObject:(id)object;


@end
1.2
//
//  XDPickView.m
//  HEAL
//
//  Created by 窦心东 on 2017/3/29.
//  Copyright © 2017年 窦心东. All rights reserved.
//

#import "XDPickView.h"

@interface XDPickView ()<UIPickerViewDataSource,UIPickerViewDelegate>
/** 数组 */
@property (nonatomic,strong) NSMutableArray *proTitleList;
/** // 选择框
 UIPickerView *pickerView  */
@property (nonatomic,strong) UIPickerView *pickerView ;


@end

@implementation XDPickView

-(NSMutableArray *)proTitleList{
    if (_proTitleList == nil) {
        _proTitleList = [NSMutableArray array];
        for (int i = 100; i<500; i++) {
            [_proTitleList addObject:[NSString stringWithFormat:@"%d",i]];
        }
    }
    return _proTitleList;
}
-(UIPickerView *)pickerView{
    if (_pickerView == nil) {
        _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        _pickerView.showsSelectionIndicator=YES;
        _pickerView.dataSource = self;
        _pickerView.delegate = self;
    }
    return _pickerView;
}
- (instancetype)init
{
    self = [super init];
    if (self) {
        [self initData];
    }
    return self;
}

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self initData];
    }
    return self;
}

- (void)initData{

    //初始化
    [self creatPickView];
}
//创建pickview
- (void)creatPickView{

    [self addSubview:self.pickerView];

}
//设置PickView的背景颜色
-(void)setBackgroundColor:(UIColor *)backgroundColor{
    _backgroundColor = backgroundColor;
    if (_backgroundColor) {
        self.pickerView.backgroundColor = _backgroundColor;
    } else {
        self.pickerView.backgroundColor = ColorWithHEAL;
    }

}
#pragma mark - 设置字体颜色
-(void)setContentTextColor:(UIColor *)contentTextColor{

    _contentTextColor = contentTextColor;
    if (_contentTextColor == nil) {
        _contentTextColor = [UIColor whiteColor];
    }
}
#pragma mark - 设置数据源数组
-(void)setPickViewTextArray:(NSMutableArray *)pickViewTextArray{
    _pickViewTextArray = pickViewTextArray;
    if (_pickViewTextArray == nil) {
        _pickViewTextArray = self.proTitleList;
    }
}
-(void)setLieWidth:(CGFloat)LieWidth{

    _LieWidth = LieWidth;
    if (_LieWidth < 40) {
        _LieWidth = 180;
    }
}
#pragma mark - 默认选中的是
- (void)MoRenSelectedRowWithObject:(id)object{
    if (object == nil) {
        return;
    }
    NSInteger row = [_pickViewTextArray indexOfObject:object];
    [self.pickerView selectRow:row inComponent:0 animated:YES];
}
#pragma mark - 改变分割线的颜色
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    //设置分割线的颜色
    for(UIView *singleLine in pickerView.subviews)
    {
        if (singleLine.frame.size.height < 1)
        {
            singleLine.backgroundColor = [UIColor clearColor];//取消分割线
        }
    }
    //设置文字的属性
    UILabel *Label = [UILabel new];
    Label.textAlignment = NSTextAlignmentCenter;
    Label.text = _pickViewTextArray[row];
    Label.textColor = _contentTextColor?_contentTextColor:[UIColor whiteColor];

    return Label;
}
#pragma mark - UIPickerViewDataSource 相关代理
#pragma Mark -- 列数
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}
#pragma mark - pickerView 每列个数
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    return _pickViewTextArray.count;
}
#pragma mark - UIPickerViewDelegate 相关代理方法
// 每列宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    return _LieWidth?_LieWidth:180;
}
#pragma mark - 返回当前行cell的内容,此处是将数组中数值添加到滚动的那个显示栏上
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{

    return _pickViewTextArray[row];

}
#pragma mark - 返回选中的行didSelectRow
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

    NSString  *selectRowString = _pickViewTextArray[row];
    NSLog(@"选中的是====%@",selectRowString);
    if ([self.delegate respondsToSelector:@selector(PickerSelectorIndixString:)]) {
        //如果我的代理响应这个方法的话 就去调用这个代理方法
        [self.delegate PickerSelectorIndixString:selectRowString];
    }

}
- (void)dealloc{


}


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end
2.1
//
//  ViewController.h
//  HEAL
//
//  Created by 窦心东 on 2017/1/18.
//  Copyright © 2017年 窦心东. All rights reserved.
//

#import "ViewController.h"

@interface ViewController : UItViewController

@end
2.2
//
//  ViewController.m
//  HEAL
//
//  Created by 窦心东 on 2017/1/18.
//  Copyright © 2017年 窦心东. All rights reserved.
//

#import "ViewController.h"
#import "XDPickView.h"
@interface ViewController ()<XDPickerDelegate>
/** 数据源数组 */
@property (nonatomic,strong) NSMutableArray *proTitleList;


@end

@implementation ViewController



-(NSMutableArray *)proTitleList{
    if (_proTitleList == nil) {
        _proTitleList = [NSMutableArray array];
        for (int i=100; i<500; i++) {
            [_proTitleList addObject:[NSString stringWithFormat:@"%d",i]];
        }
    }
    return _proTitleList;
}

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];


}
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
   //实例 
    XDPickView *pick = [[XDPickView alloc] initWithFrame:CGRectMake(20, 100, SCREEN_WIDTH-40, 200)];
    pick.backgroundColor = ColorWithHEAL;
    pick.contentTextColor = [UIColor yellowColor];
    pick.LieWidth = 80;
    pick.delegate = self;
    [self.view addSubview:pick];
    pick.pickViewTextArray = self.proTitleList;//设置数据
    [pick MoRenSelectedRowWithObject:@"200"];//默认选中的哪一项



}
#pragma mark -- XDPickViewDelegate 的代理方法必须实现
-(void)PickerSelectorIndixString:(NSString *)str{
    NSLog(@"代理方法实现的选中的是%@",str);
}

你可能感兴趣的:(objective-c)