iOs基礎篇(二十二)—— UIPickerView、UIDatePicker控件的使用


一、UIPickerView

UIPickerView是一個選擇器控件,可以生成單列的選擇器,也可生成多列的選擇器,而且開發者完全可以自定義選擇項的外觀,因此用法非常靈活。

1、常用屬性

(1)numberOfComponents:獲取UIPickerView指定列中包含的列表項的數量。

(2)showsSelectionIndicator:控制是否顯示UIPickerView中的選中標記(以高亮背景作為選中標記)。

2、常見方法

(1)- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

  獲取UIPickerView包含的列數量

 

(2)- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

  該UIPickerView將通過該方法判斷指定列應該包含多少個列表項

 

(3)- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;

  該方法返回的CGFloat值將作為該UIPickerView控件中指定列的寬度

 

(4)- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;

  該方法返回的CGFloat值將作為該UIPickerView控件中指定列中列表項的高度

 

(5)- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;

  該方法返回的NSString值將作為該UIPickerView控件中指定列的列表項的文本標題

 

(6)- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;

  該方法返回的UIView控件將直接作為該UIPickerView控件中指定列的指定列表項

 

(7)- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;

    當用戶單擊選中該UIPickerView控件的指定列的指定列表項時將會激發該方法

 

demo代碼:

 

 1 #import "ViewController.h"
 2 
 3 @interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>{
 4  
 5     UIPickerView *pickerView;
 6     NSArray *nameArray;
 7     NSArray *ageArray;
 8 }
 9 
10 @end
11 
12 @implementation ViewController
13 
14 - (void)viewDidLoad {
15     [super viewDidLoad];
16     // Do any additional setup after loading the view, typically from a nib.
17     
18     CGFloat width = self.view.frame.size.width;
19     
20     pickerView = [[UIPickerView alloc] initWithFrame:(CGRect){0,0,width,300}];
21     [self.view addSubview:pickerView];
22     pickerView.dataSource = self;
23     pickerView.delegate = self;
24     pickerView.showsSelectionIndicator = YES;
25     
26     // 創建並初始化兩個NSArray對象,分別作為兩列的數據
27     nameArray = @[@"", @"", @"", @"", @"", @""];
28     ageArray =  @[@"11", @"22", @"33", @"44", @"55", @"66"];
29     
30 }
31 
32 // UIPickerViewDataSource中定義的方法,該方法返回值決定該控件包含多少列
33 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
34     return 2;// 返回2表明該控件只包含2列
35 }
36 
37 //該方法的返回值決定該控件指定列包含多少個列表項
38 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
39     if (component==0) {
40         // 如果是第一列,返回nameArray中元素的個數
41         // 即nameArray包含多少個元素,第一列就包含多少個列表項
42         return [nameArray count];
43     }else
44         // 如果是其他列,返回ageArray中元素的個數。
45         // 即ageArray包含多少個元素,其他列(只有第二列)包含多少個列表項
46         return [ageArray count];
47 }
48 
49 //UIPickerView中指定列的寬度
50 - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
51 
52     if (component==0) {
53         // 如果是第一列,寬度為50
54         return 50;
55     }else
56         // 如果是其他列(只有第二列),寬度為80
57         return 80;
58 }
59 
60 - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
61 
62     return 40;
63 }
64 
65 //當用戶選中UIPickerViewDataSource中指定列和列表項時激發該方法
66 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
67     NSArray* name = [nameArray objectAtIndex:row];
68     // 使用一個UIAlertView來顯示用戶選中的列表項
69     UIAlertView* alert = [[UIAlertView alloc]
70                           initWithTitle:@"提示"
71                           message:[NSString stringWithFormat:@"你選中的%@是:%@"
72                                    , name, [ageArray objectAtIndex:row]]
73                           delegate:nil
74                           cancelButtonTitle:@"確定"
75                           otherButtonTitles:nil];
76     [alert show];
77 }
78 
79 //UIPickerView中指定列和列表項上顯示的標題
80 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
81     // 如果是第一列,返回nameArray中row索引處的元素
82     // 即第一列的列表項標題由nameArray集合元素決定
83     if (component==0) {
84         return [nameArray objectAtIndex:row];
85     }else
86         return [ageArray objectAtIndex:row];
87 
88 }

 

 

二、UIDatePicker

 UIDatePicker繼承自UIControl,專門用於接受日期、時間和持續時長的輸入。日期選取器的各列會按照指定的風格進行自動配置,這樣就讓開發者不必關心如何配置表盤這樣的底層操作。你也可以對其進行定制,令其使用任何范圍的日期。

1、創建UIDatePicker及添加代理

(1)創建UIPickerView;

(2)將pickerView添加至視圖;

(3)實現監聽事件方法;

 1 #import "ViewController.h"
 2 
 3 @interface ViewController (){
 4 
 5     UIDatePicker *datePicker;
 6 }
 7 
 8 @end
 9 
10 @implementation ViewController
11 
12 - (void)viewDidLoad {
13     [super viewDidLoad];
14     // Do any additional setup after loading the view, typically from a nib.
15     
16     datePicker = [[UIDatePicker alloc] initWithFrame:(CGRect){0,0,300,300}];
17     [self.view addSubview:datePicker];
18     
19     [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
20     
21 }
22 
23 - (void)dateChange:(UIDatePicker*)dateSender{
24     UIDatePicker *ctrl = (UIDatePicker*)dateSender;
25     NSDate *date = ctrl.date;
26     
27     NSLog(@"%@",date);
28 
29 }

2、UIDatePicker設置顯示格式

(1) 創建並初始化NSLocale;

(2) 將datePicker.locale屬性set為NSLocale的值;

(3) 設置12/24小時制是根據手機本身時間顯示;

1     
2     NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zw"];
3     datePicker.locale = locale;

3、設置DatePicker的日歷

默認為當天;

1 [datePicker setCalendar:[NSCalendar currentCalendar]];

4、設置DatePicker的時區

1 [datePicker setTimeZone:[NSTimeZone defaultTimeZone]];

5、設置DatePicker的允許的最小/最大日期

minimumDate/maximunDate;

6、設置DatePicker的倒計時間

1) 設置日期選擇的模

 [datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];

 2) 設置倒計時的時長

注意:設置倒計時時長需要在確定模式之后指定

 // 倒計時的時長,以秒為單位

[datePicker setCountDownDuration:10 * 60];

效果圖:

7、設置分鍾間隔

datePicker.minuteInterval = 15;

8、顯示小時,分鍾和AM/PM,這個的名稱是根據本地設置的

[datePicker setDatePickerMode:UIDatePickerModeTime]; 

效果圖:

9、顯示年月日,名稱根據本地設置的

[datePicker setDatePickerMode:UIDatePickerModeDate];

效果圖:

10、 顯示日期,小時,分鍾,和AM/PM,名稱是根據本地設置的

[datePicker setDatePickerMode:UIDatePickerModeDateAndTime];

效果圖:

11、顯示小時和分鍾

[datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];

效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM