亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中自定義彈出pickerView效果(DEMO)

2020-07-26 02:58:59
字體:
來源:轉載
供稿:網友

 UIPickerView平常用的地方好像也不是很多,頂多就是一些需要選擇的地方,這次項目需要這一個功能,我就單獨寫了一個簡單的demo,效果圖如下:

新增主頁面彈出view,在主頁面添加的代碼

有個小問題就是第四個直接添加在主頁彈出來的view好像被導航欄給覆蓋了,我還沒去研究,就著急的先吧功能寫了。大家諒解下

9月-03-2016 17-49-51.gif

最初版本

picker.gif

    話說我終于弄了gif了,再也不要去截圖每張圖都發一遍了?。?/p>

    這個demo呢,等于是可以拿來直接用的第三方了吧,只需要傳數據就可以了,彈出的三個框顯示的數據也不一樣,我的封裝能力不行,所以都是單獨寫了,在這里呢,我先把鏈接發上,大家要是沒有耐心的其實可以直接看demo,下載了,看下代碼基本上就會了。YLSPicker。

    實現的基本思路呢,其實也挺簡單的。我這里就說下我實現的過程,然后貼上代碼片段,大家可以看一下。

第一步:主頁面的設置

    這里其實也沒啥好說的,頁面上三個不能輸入的三個文本框,然后點擊會彈出東西來。

//宏定義#define YLSRect(x, y, w, h) CGRectMake([UIScreen mainScreen].bounds.size.width * x, [UIScreen mainScreen].bounds.size.height * y, [UIScreen mainScreen].bounds.size.width * w, [UIScreen mainScreen].bounds.size.height * h)@interface ViewController ()<UITextFieldDelegate>//聲明/** text1 */@property (nonatomic,strong) UITextField *text1;/** text2 */@property (nonatomic,strong) UITextField *text2;/** text3 */@property (nonatomic,strong) UITextField *text3;@end - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Picker"; //placeholder數組 NSArray *placeholderArr = @[@"Picker OneVlaue",@"Picker TwoVlaue",@"Picker ThreeVlaue"]; //循環添加文本框 for (int i = 0; i < 3; i ++) {  UITextField *text = [[UITextField alloc]initWithFrame:YLSRect(100/375, (140 + i * 60)/667, 175/375, 30/667)];  text.borderStyle = UITextBorderStyleRoundedRect;  text.backgroundColor = [UIColor lightGrayColor];  text.tag = i + 1000;  text.placeholder = placeholderArr[i];  text.delegate = self;  [self.view addSubview:text];  if(text.tag == 1000)  {   self.text1 = text;  }else if(text.tag == 1001)  {   self.text2 = text;  }else  {   self.text3 = text;  } } } 

    很多像我這樣的新手,對textfiled的代理都不是很清楚,像我這個點擊文本框不進行編輯,然后還能彈出自定義view的事件應該在哪里實現呢,答案就是在

//點擊文本框時觸發的事件- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;

就這樣,主頁面算是勾畫好了。接下來就是自定義view的部分了。

第二步:實現自定義view

    1.創建類YLSOPickerView

    2.在.h文件中聲明變量,一個是需要傳入的數組,一個是彈出框的標題。還要聲明兩個方法:

@interface YLSOPickerView : UIView/** array */@property (nonatomic,strong) NSArray *array;/** title */@property (nonatomic,strong) NSString *title;//快速創建+(instancetype)pickerView;//彈出-(void)show;@end

    3.接下來的就是最主要的工作,就是.m文件的編寫

宏定義

#define YLSRect(x, y, w, h) CGRectMake([UIScreen mainScreen].bounds.size.width * x, [UIScreen mainScreen].bounds.size.height * y, [UIScreen mainScreen].bounds.size.width * w, [UIScreen mainScreen].bounds.size.height * h)#define YLSFont(f) [UIFont systemFontOfSize:[UIScreen mainScreen].bounds.size.width * f]#define YLSColorAlpha(r,g,b,a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)]#define YLSMainBackColor [UIColor colorWithRed:240/255.0 green:239/255.0 blue:245/255.0 alpha:1]#define BlueColor [UIColor colorWithRed:0/255.0 green:122/255.0 blue:255/255.0 alpha:1]#define ClearColor [UIColor clearColor]

聲明需要用到的控件,遵守響應的協議

@interface YLSOPickerView()<UIPickerViewDelegate,UIPickerViewDataSource>/** view */@property (nonatomic,strong) UIView *topView;/** button */@property (nonatomic,strong) UIButton *doneBtn;/** pickerView */@property (nonatomic,strong) UIPickerView *pickerView;/** 選擇傳回的值 */@property (nonatomic,strong) NSString *result;@end

實現init方法和創建方法

//快速創建+ (instancetype)pickerView{ return [[self alloc]init];}-(instancetype)initWithFrame:(CGRect)frame{ self = [super initWithFrame:YLSRect(0, 0, 1, 917/667)]; if (self) {  self.backgroundColor = YLSColorAlpha(0, 0, 0, 0.4);  } return self;}

    這里呢我要說一下的是,為了達到在點擊文本框從下彈出的一個動態效果,所以起初的時候我將整個view的長度設置成了一個屏幕的長度加上選擇器的長度,在彈出方法中我將整個view上移著添加進屏幕。這樣會有好看點效果

添加頁面控件,設置樣式位置等

-(void)layoutSubviews{ [super layoutSubviews]; self.topView = [[UIView alloc]initWithFrame:YLSRect(0, 667/667, 1, 250/667)]; self.topView.backgroundColor = [UIColor whiteColor]; [self addSubview:self.topView]; //為view上面的兩個角做成圓角。不喜歡的可以注掉 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.topView.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(5, 5)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = self.topView.bounds; maskLayer.path = maskPath.CGPath; self.topView.layer.mask = maskLayer; self.doneBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [self.doneBtn setTitle:@"Done" forState:UIControlStateNormal]; [self.doneBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; [self.doneBtn setFrame:YLSRect(320/375, 5/667, 50/375, 40/667)]; [self.doneBtn addTarget:self action:@selector(quit) forControlEvents:UIControlEventTouchUpInside]; [self.topView addSubview:self.doneBtn]; UILabel *titlelb = [[UILabel alloc]initWithFrame:YLSRect(100/375, 0, 175/375, 50/667)]; titlelb.backgroundColor = ClearColor; titlelb.textAlignment = NSTextAlignmentCenter; titlelb.text = self.title; titlelb.font = YLSFont(20/375); [self.topView addSubview:titlelb]; self.pickerView = [[UIPickerView alloc]init]; [self.pickerView setFrame:YLSRect(0, 50/667, 1, 200/667)]; [self.pickerView setBackgroundColor:YLSMainBackColor]; [self.pickerView setDelegate:self]; [self.pickerView setDataSource:self]; [self.pickerView selectRow:0 inComponent:0 animated:YES]; [self.topView addSubview:self.pickerView];}

    同樣,在這里我把topview的左上和右上兩個角設置成了圓角也就是為了好看點,其實沒啥區別,用的時候可以根據自己的需求來注釋掉啥的。

實現pickerView的協議方法

<UIPickerViewDelegate,UIPickerViewDataSource>// 返回選擇器有幾列.- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 1;}// 返回每組有幾行- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ return [self.array count];}#pragma mark - 代理// 返回第component列第row行的內容(標題)- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ return self.array[row];}// 選中第component第row的時候調用- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ self.result = self.array[row];}

先現實show方法,然后實現點擊按鈕Done的推出方法

//彈出- (void)show{ [self showInView:[UIApplication sharedApplication].keyWindow];}//添加彈出移除的動畫效果- (void)showInView:(UIView *)view{ // 浮現 [UIView animateWithDuration:0.5 animations:^{  CGPoint point = self.center;  point.y -= 250;  self.center = point; } completion:^(BOOL finished) {  }]; [view addSubview:self];}
-(void)quit{ [UIView animateWithDuration:0.5 animations:^{  self.alpha = 0;  CGPoint point = self.center;  point.y += 250;  self.center = point; } completion:^(BOOL finished) {  if (!self.result) {   self.result = self.array[0];  }  NSLog(@"%@",self.result);  [[NSNotificationCenter defaultCenter]postNotificationName:@"value" object:self.result];  [self removeFromSuperview]; }];}

    在這里呢,需要注意的是,假設你沒有點擊,沒有滑動的話,self.result是空值,所以需要你判斷下,若為空,傳入數組第一個數據,不為空的話就直接傳遞了,另外我用的是通知傳值,因為block傳值我還沒有去學習了解,所以這里就用上我會的一個通知傳值,但是我有個小問題,希望看到的人回答下我,通知一般在什么時候移除比較好呢??

第三步:主頁實現點擊出現的方法,并且接收回傳的值。

主頁面引入頭文件#import “YLSOPickerView.h”

實現點擊彈出的事件

#pragma mark - UITextFieldDelegate//點擊文本框時觸發的事件,喚起跳出視圖- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ if(textField.tag == 1000) {  YLSOPickerView *picker = [[YLSOPickerView alloc]init];  picker.array = @[@"iPhone4",@"iPhone4S",@"iPhone5",@"iPhone5S",@"iPhone5C",@"iPhone6",@"iPhone6Plus",@"iPhone6S",@"iPhone6SPlus"];  picker.title = @"pick number";  [picker show]; } return NO;}

在- (void)viewDidLoad方法中接收通知,實現通知方法

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(getValue:) name:@"value" object:nil];-(void)getValue:(NSNotification *)notification{ self.text1.text = notification.object;}

這樣一來,一個簡單的挑選單個數據的自定義選擇器就算是大功告成了,使用起來有些許不方法,大家如果使用的話可以自己修改修改,此外要是有什么好的改進方法,大家也可以教教我,一起學習學習

Others

    在另外兩個文本框點擊出現的選擇器本質上還是與上面寫的一樣,只是第二個數有聯動效果的,第一組數據滑動的時候,第二組數據也跟著換,那我在寫的時候傳入的數據是字典形式的,然后另外設置兩個數組將字典里的數據接收了,當然,開始就傳數組形式的數據也可以,只需要在協議方法里面修改響應的代碼就可以了。其他沒什么變化。

傳值的時候

    第三個文本框也同樣與前兩個本質上行沒有啥區別,只是在上面多了一個隨機按鈕,隨機按鈕點擊事件實現也挺簡單的

self.ranBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [self.ranBtn setTitle:@"Random" forState:UIControlStateNormal]; [self.ranBtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal]; [self.ranBtn setFrame:YLSRect(5/375, 5/667, 100/375, 40/667)]; [self.ranBtn addTarget:self action:@selector(random:) forControlEvents:UIControlEventTouchUpInside]; [self.topView addSubview:self.ranBtn];
-(void)random:(UIPickerView *)picker{ for (int i = 0; i < 3; i++) {  // 取出第i列的行數  NSInteger count = [self.array[i] count];  int random = arc4random_uniform((u_int32_t)count);  //不會觸發代理的選中方法  [self.pickerView selectRow:random inComponent:i animated:YES];  //label數據刷新  [self pickerView:picker didSelectRow:random inComponent:i]; }}

以上所述是小編給大家介紹的iOS中自定義簡單彈出pickerView(DEMO),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日本精品在线| 欧美性生交大片免费| 黑人巨大精品欧美一区二区三区| 8090理伦午夜在线电影| 亚洲社区在线观看| 亚洲精品久久久久久久久久久| 亚洲成人精品视频在线观看| 久久人人爽人人| 亚洲美女又黄又爽在线观看| 在线免费观看羞羞视频一区二区| 91免费看片在线| 日韩av一区二区在线观看| 国产日本欧美一区二区三区在线| 高清欧美性猛交xxxx| 欧美视频在线观看 亚洲欧| 欧美另类暴力丝袜| 国产欧洲精品视频| 欧美成人中文字幕| 在线精品播放av| 午夜精品一区二区三区在线播放| 日韩美女毛茸茸| 久久91亚洲精品中文字幕奶水| 国产精品成人品| 久久久国产视频91| 国产成人啪精品视频免费网| 久久国产精品亚洲| 最近中文字幕mv在线一区二区三区四区| 久久精品亚洲精品| 97在线视频国产| 狠狠躁夜夜躁人人躁婷婷91| 国产99久久精品一区二区 夜夜躁日日躁| 91精品久久久久久久久久另类| 亚洲福利视频二区| 日韩中文字幕网站| 国产精品人成电影| 欧美激情成人在线视频| 亚洲九九九在线观看| 中文字幕亚洲字幕| 国产精品免费一区| 久久久久亚洲精品成人网小说| 国产精品露脸自拍| 国产成人综合精品| 国产欧美日韩丝袜精品一区| 亚洲欧美日本另类| 亚洲第一区中文字幕| 亚洲第一级黄色片| 欧美专区在线观看| 亚洲欧美日韩成人| 国产精品日韩欧美| 国产亚洲综合久久| 中文字幕不卡在线视频极品| 日韩在线观看免费网站| 日韩电影中文字幕在线| 热久久视久久精品18亚洲精品| 国产精品成人av在线| 欧美黑人巨大xxx极品| 国产精品美女无圣光视频| 亚洲伊人久久综合| 国产精品亚洲美女av网站| 欧美资源在线观看| 国产精品伦子伦免费视频| 亚洲福利在线观看| 日韩一区二区三区国产| 欧美xxxx18性欧美| 欧美中文在线视频| 69av成年福利视频| 亚洲国产另类久久精品| 精品国产成人在线| 欧亚精品中文字幕| 日韩精品极品毛片系列视频| 久久频这里精品99香蕉| 国产亚洲欧美一区| 岛国av一区二区三区| 久久久国产精品免费| 欧美日韩国产精品| 操人视频在线观看欧美| 亚洲精品一区中文字幕乱码| 欧美猛交ⅹxxx乱大交视频| 国产日韩精品视频| 欧美激情在线观看| 久久免费视频在线| 欧美日韩在线视频一区| 91久久国产精品| 91精品国产自产在线老师啪| 亚洲人成电影网站色…| 成人免费xxxxx在线观看| 91精品视频免费看| 日韩精品免费视频| 日韩av影视综合网| 麻豆乱码国产一区二区三区| 日韩av色综合| 美日韩在线视频| 久久成人这里只有精品| 国产精品视频精品视频| 九九久久国产精品| 欧美国产日韩一区| 久热国产精品视频| 亚洲视频电影图片偷拍一区| 欧美激情精品久久久久久| 自拍偷拍亚洲欧美| 97视频在线观看播放| 日韩国产精品亚洲а∨天堂免| 9.1国产丝袜在线观看| 欧美另类高清videos| 最新国产精品亚洲| 三级精品视频久久久久| 中文字幕在线成人| 91免费高清视频| 国产精品揄拍一区二区| 亚洲丁香久久久| 中文字幕亚洲综合久久筱田步美| 国产91精品久久久| 国产成人啪精品视频免费网| 国产精品情侣自拍| 91丨九色丨国产在线| 亚洲网站在线播放| 精品国产乱码久久久久久婷婷| 亚洲va久久久噜噜噜久久天堂| 国产一区在线播放| 国语自产精品视频在免费| 国产精品嫩草影院一区二区| 亚洲欧美综合另类中字| 亚洲色图17p| 亚洲欧美中文日韩v在线观看| 日韩欧美亚洲国产一区| 欧美日韩亚洲视频| 97超级碰在线看视频免费在线看| 成人黄在线观看| 亚洲视频在线观看| 亚洲美女性视频| 九九热在线精品视频| 一色桃子一区二区| 欧美日韩国产中文精品字幕自在自线| 91色在线视频| 在线观看日韩www视频免费| 久久久成人av| 亚洲欧美一区二区三区四区| 日韩视频在线观看免费| 欧美精品在线免费观看| 亚洲欧美日韩爽爽影院| 欧美寡妇偷汉性猛交| 超薄丝袜一区二区| 热99精品里视频精品| 久久久精品免费视频| 成人在线精品视频| 欧美黑人一区二区三区| 久久精品国产免费观看| 国产亚洲欧美aaaa| 色综合久久88色综合天天看泰| 成人黄色中文字幕| 全球成人中文在线| 91av在线免费观看| 亚洲精品在线观看www| 国产激情视频一区| 成人写真福利网| 欧美中文字幕在线播放| 日韩精品免费看| 国产97在线视频| 国产精品欧美一区二区| 国产精品视频男人的天堂| 日韩不卡中文字幕| 韩国精品美女www爽爽爽视频| 日韩欧美大尺度| 成人福利视频网|