UIPickerView初識

在之前沒有使用過UIPickerView,最近有個項目需要寫一個日期選擇器和性別選擇器,查閱了資料,大多數(shù)都是用UIPickerView來完成效果街望,于是就找了一個日期選擇器的demo巷疼,效果如下:

感覺效果還行,于是在寫性別選擇器的時候蜜暑,自己也封裝了一個晨川,需要用的時候稍微修改一下就ok了,效果如下:

使用時需要#import "ZGSexPickerView.h"和遵循協(xié)議ZGSexPickerViewDelegate
代碼:
//ZGSexPickerView.h

#import <UIKit/UIKit.h>

@class ZGSexPickerView;//向前引用
@protocol ZGSexPickerViewDelegate <NSObject>
@optional
/**
 返回選擇的時間字符串
 
 @param pickerView pickerView
 @param sexString 性別字符串
 */
- (void)pickerView:(ZGSexPickerView *)pickerView didSelectSexString:(NSString *)sexString;

@end

@interface ZGSexPickerView : UIView

@property (nonatomic, weak) id<ZGSexPickerViewDelegate> delegate;

- (void)show;

@end

//ZGSexPickerView.m

#import "ZGSexPickerView.h"

@interface ZGSexPickerView () <UIPickerViewDataSource,UIPickerViewDelegate>

@property (nonatomic, strong) NSArray *sexArray;
@property (nonatomic, strong) UIToolbar *toolBar;
@property (nonatomic, strong) UIPickerView *pickerView;
@property (nonatomic, strong) NSString *sex;
@property (nonatomic, strong) UIView *screenView;

@end

@implementation ZGSexPickerView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
        [self initializeUserInterface];
    }
    return self;
}

#pragma mark - 初始化界面
- (void)initializeUserInterface {
    
    self.sexArray = @[@"保密",@"男",@"女"];
    self.sex = @"保密";
    
    //pickerView
    //初始化一個PickerView
    _pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, kScreenWidth, self.frame.size.height)];
    //指定Picker的代理
    _pickerView.backgroundColor = [UIColor whiteColor];
    _pickerView.dataSource = self;
    _pickerView.delegate = self;
    //是否要顯示選中的指示器(默認值是NO)
    _pickerView.showsSelectionIndicator = NO;
    [self addSubview:self.pickerView];
    
    //toolBar
    _toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 44)];
    _toolBar.barStyle = UIBarStyleBlackTranslucent;
    // 設(shè)置UIToolbar背景色
    _toolBar.barTintColor = [UIColor colorWithRed:239.0/255.0
                                            green:239.0/255.0
                                             blue:244.0/255.0
                                            alpha:1.0];
    // 取消按鈕
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"   取消"
                                                                 style:UIBarButtonItemStylePlain
                                                                target:self
                                                                action:@selector(removePickView)];
    
    [leftItem setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]}
                            forState:UIControlStateNormal];
    [leftItem setTintColor:[UIColor grayColor]];
    
    UIBarButtonItem *centerSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    // 確定按鈕
    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"確定   "
                                                                  style:UIBarButtonItemStyleDone
                                                                 target:self
                                                                 action:@selector(doneBtnClicked)];
    [rightItem setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14]}
                             forState:UIControlStateNormal];
    // 設(shè)置字體顏色
    //[rightItem setTintColor:[UIColor colorWithRed:67.0/255.0 green:199.0/255.0 blue:203.0/255.0 alpha:1.0]];
    
    _toolBar.items = @[leftItem,centerSpace,rightItem];
    [self addSubview:self.toolBar];
}

/**
 移除PickerView
 */
- (void)removePickView
{
    [self.screenView removeFromSuperview];
}
/**
 確定
 */
- (void)doneBtnClicked
{
    [self.delegate pickerView:self didSelectSexString:self.sex];
    [self removePickView];
}
- (void)show
{
    _screenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeigth)];
    _screenView.backgroundColor = [UIColor colorWithRed:0/255.0
                                                  green:0/255.0
                                                   blue:0/255.0
                                                  alpha:0.3];
    
    [_screenView addSubview:self];
    
    [[UIApplication sharedApplication].keyWindow addSubview:_screenView];
}

- (void)layoutSubviews {
    [super layoutSubviews];
}

//返回列數(shù)
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
//每列行數(shù)
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return self.sexArray.count;
}
//組件寬度
-(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
    return kScreenWidth;
}
//每行組件高度
-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    return 40;
}
//組件每行的標(biāo)題
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return self.sexArray[row];
}
//選中行的事件處理
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    self.sex = self.sexArray[row];
//    [pickerView selectedRowInComponent:0];
}

#pragma mark - Action



#pragma mark - 懶加載


@end

使用方法

-(void)showSexpickerView{
    ZGSexPickerView *pickerView = [[ZGSexPickerView alloc] initWithFrame:(CGRectMake(0, kScreenHeigth - 216, kScreenWidth, 216))];
    pickerView.delegate = self;
    [pickerView show];
}
-(void)pickerView:(ZGSexPickerView *)pickerView didSelectSexString:(NSString *)sexString{
    NSLog(@"選擇性別:%@",sexString);
}

新增Swift版:

import UIKit

class ZGJPickerView: UIView {
    
    //數(shù)據(jù)源數(shù)組
    //類型自行處理,此處暫定為可變數(shù)組
    var dataArray: NSMutableArray = {
       return NSMutableArray()
    }()
    
    //默認選中的字符
    var currentStr = ""
    
    private var screenView = UIView()
    
    override func drawRect(rect: CGRect) {
 
        self.creatUI()
    }
 
}

//MARK: - 界面
extension ZGJPickerView{
    
    func creatUI(){
        
        //pickerView
        let pickerView = UIPickerView(frame: CGRectMake(0, 44, kScreen_W, self.frame.size.height))
        pickerView.backgroundColor = UIColor.whiteColor()
        pickerView.dataSource = self
        pickerView.delegate = self
        //是否要顯示選中的指示器(默認值是NO)
        pickerView.showsSelectionIndicator = false
        self.addSubview(pickerView)
        
        //toolBar
        let toolBar = UIToolbar(frame: CGRectMake(0, 0, kScreen_W, 44))
        toolBar.barStyle = UIBarStyle.BlackTranslucent
        // 設(shè)置UIToolbar背景色
        toolBar.barTintColor = UIColor(red: 239.0/255.0, green: 239.0/255.0, blue: 244.0/255.0, alpha: 1.0)
        // 取消按鈕
        let leftItem = UIBarButtonItem(title: "  取消", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(ZGJPickerView.removePickView))
        leftItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFontOfSize(17)], forState: .Normal)
        leftItem.tintColor = UIColor.grayColor()
        let centerSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil)

        // 確定按鈕
        let rightItem = UIBarButtonItem(title: "確定  ", style: UIBarButtonItemStyle.Done, target: self, action: #selector(ZGJPickerView.doneBtnClicked))
        rightItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFontOfSize(17)], forState: .Normal)
        
        toolBar.items = [leftItem,centerSpace,rightItem]
        self.addSubview(toolBar)
        
        
    }
}

//MARK: - 點擊事件
extension ZGJPickerView{
    
    func removePickView(){
        self.screenView.removeFromSuperview()
    }
    
    func doneBtnClicked()
    {
        //做什么自行處理
        self.removePickView()
    }
    
    func show(){
        screenView.frame = CGRectMake(0, 0, kScreen_W, kScreen_H)
        screenView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3)
        screenView.addSubview(self)
        UIApplication.sharedApplication().keyWindow?.addSubview(screenView)
    }
}

//MARK: UIPickerView協(xié)議
extension ZGJPickerView:UIPickerViewDataSource,UIPickerViewDelegate{
    //返回列數(shù)
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }
    //返回行數(shù)
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return 5//dataArray.count
    }
    
    //組件寬度
    func pickerView(pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
        return kScreen_W
    }
    //每行組件高度
    func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
        return 40
    }
    //組件每行的標(biāo)題
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return "標(biāo)題"
    }
    //選中行的事件處理
    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        //row:列 component:組
        //自行處理,如dataArray[row]...
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彭谁,一起剝皮案震驚了整個濱河市吸奴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缠局,老刑警劉巖则奥,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異狭园,居然都是意外死亡读处,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門唱矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罚舱,“玉大人,你說我怎么就攤上這事绎谦」苊疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵窃肠,是天一觀的道長包个。 經(jīng)常有香客問我,道長铭拧,這世上最難降的妖魔是什么赃蛛? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮搀菩,結(jié)果婚禮上呕臂,老公的妹妹穿的比我還像新娘。我一直安慰自己肪跋,他們只是感情好歧蒋,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著州既,像睡著了一般谜洽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吴叶,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天阐虚,我揣著相機與錄音,去河邊找鬼蚌卤。 笑死实束,一個胖子當(dāng)著我的面吹牛奥秆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咸灿,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼构订,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了避矢?” 一聲冷哼從身側(cè)響起悼瘾,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎审胸,沒想到半個月后亥宿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡歹嘹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年箩绍,在試婚紗的時候發(fā)現(xiàn)自己被綠了孔庭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尺上。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖圆到,靈堂內(nèi)的尸體忽然破棺而出怎抛,到底是詐尸還是另有隱情,我是刑警寧澤芽淡,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布马绝,位于F島的核電站,受9級特大地震影響挣菲,放射性物質(zhì)發(fā)生泄漏富稻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一白胀、第九天 我趴在偏房一處隱蔽的房頂上張望椭赋。 院中可真熱鬧,春花似錦或杠、人聲如沸哪怔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽认境。三九已至,卻和暖如春挟鸠,著一層夾襖步出監(jiān)牢的瞬間叉信,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工艘希, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硼身,地道東北人鉴未。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鸠姨,于是被迫代替她去往敵國和親铜秆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容