UIPickerView 屬于UIView的子類 UIDataPicker時間類
UIPickerView簡介:
UIPickerView是一個 拾取器,UIPickerView和UIDatePicker是類似的控件,只不過UIDatePicker是日期控件,只能放日期,而UIPickerView可以放任何東西。它比UIDatePicker更加通用,它可以生成單列的選擇器,也可生成多列的選擇器,而且開發者完全可以自定義選擇項的外觀,因此用法非常靈活。UIPickerView直接繼承了UIView,沒有繼承UIControl,因此,它不能像UIControl那樣綁定事件處理方法,UIPickerView的事件處理由其委托對象完成。使用UIPickerView的對象應該遵守UIPickerViewDataSource,UIPickerViewDelegate這兩個代理。
UIPickerView的具體實現步驟:
1??創建視圖 初始化UIPickerView
2??導入兩個代理<UIPickerViewDelegate,UIPickerViewDataSource>
3??掛上代理
4??實現代理
???顯示視圖
下面以一個簡單的例子來介紹它 實現的功能:
#import "ViewController.h"
@interface ViewController ()<UIPickerViewDataSource,UIPickerViewDelegate>//2??導入兩個代理
{
NSArray *dataarray;
NSArray *dataarray1;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//數據源數組
dataarray = @[@"北京",@"上海",@"深圳",@"廈門",@"長沙",@"成都"];
dataarray1 = @[@"01",@"02",@"03",@"04",@"05",@"06"];
// 1??創建視圖 初始化UIPickerView
UIPickerView *pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(120, 240, 200, 180)];
// 3??掛上代理
pickerView.dataSource = self;
pickerView.delegate = self;
[self.view addSubview:pickerView];
}
//4??實現代理
#pragma mark -----數據源UIPickerViewDataSource代理的方法-
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 2;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return dataarray.count;
}
#pragma mark -----數據源UIPickerViewDelegate代理的方法
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSString *alertString = [NSString stringWithFormat:@"row%ld component%ld",row+1,component+1];
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"選中" message:alertString preferredStyle:UIAlertControllerStyleAlert];
// 添加按鈕
UIAlertAction *alertButton = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
//按鈕添加到彈出框
[alertController addAction:alertButton];
//顯示出來
[self presentViewController:alertController animated:YES completion:^{
}];
}
//返回指定行的標題
- (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (component == 0) {
return dataarray[row];
}else{
return dataarray1[row];
}
}
它還有其他的方法,可以自己研究一下。
// 設置分組的寬
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
return 1;
}
//設置單元格的高 - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
return 1;
}
//獲取指定分組component中的行數
- (NSInteger)numberOfRowsInComponent:(NSInteger)component{
// return _array.count;
return nil;
}
//獲取單元格的Size - (CGSize)rowSizeForComponent:(NSInteger)component{
}
//獲取pickerView:viewForRow:forComponent:reusingView:中定義的View,當pickerView:viewForRow:forComponent:reusingView:未實現或者行或分組不可用時返回nil
- (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component;
//刷新所有分組
- (void)reloadAllComponents;
//刷新指定分組
- (void)reloadComponent:(NSInteger)component;
//選中指定分組中的一行
- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;
//獲得指定分組中選中的行
(NSInteger)selectedRowInComponent:(NSInteger)component;
(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
//必須實現的方法(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
// NSString *string = _array[row];
// return string;
return nil;
}(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// self.selectItem = _array[row];
}
單元格中內容的展示,以下三種方法三選一
//設置顯示普通字符串
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
//設置顯示屬性字符串,如果該方法和普通字符串方法都實現了,效果是屬性字符串
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component NS_AVAILABLE_IOS(6_0);
//自定義顯示視圖
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
單元格選中時的委托方法,需要注意的是,單元格的值改變后停止滾動動畫停止即調用這個方法,不需要手點擊
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
我只是簡單的寫了,寫的不好,請諒解。