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

首頁 > 系統 > iOS > 正文

詳解iOS App中UIPickerView滾動選擇欄的添加方法

2020-07-26 03:20:19
字體:
來源:轉載
供稿:網友

1.UIPickerView的寬度和高度是固定的,縱向是320216,橫向是568162

2.屬性:

復制代碼 代碼如下:

@property(nonatomic,readonly)NSInteger numberOfComponents; // 選擇框的行數

@property(nonatomic,assign)idUIPickerViewDataSource> dataSource; (類似于UITableView)

@property(nonatomic,assign)idUIPickerViewDelegate>delegate; (類似于UITableView)

(BOOL)showsSelectionIndicator// 是否顯示選擇指示器 ,即是一個藍色的條

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
//    指定Delegate 
    pickerView.delegate=self; 
//    顯示選中框 
    pickerView.showsSelectionIndicator=YES; 
    [self.view addSubview:pickerView]; 


以上可以在視圖顯示一個選取器,但是內容空白,pickerView.showsSelectionIndicator=YES;是這只當前選取器所選中的內容:

選取器上顯示數據,必須依賴兩個協議,UIPickerViewDelegate和UIPickerViewDataSource,把他們添加到ViewController.h文件中

復制代碼 代碼如下:

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource> 

    UIPickerView *pickerView; 
    NSArray *pickerData; 

@end 


3.然后在.m文件的ViewDidLoad中初始化界面
復制代碼 代碼如下:

- (void)viewDidLoad 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; 
//    指定Delegate 
    pickerView.delegate=self; 
//    顯示選中框 
    pickerView.showsSelectionIndicator=YES; 
    [self.view addSubview:pickerView];  

    NSArray *dataArray = [[NSArray alloc]initWithObjects:@"許嵩",@"周杰倫",@"梁靜茹",@"許飛",@"鳳凰傳奇",@"阿杜",@"方大同",@"林俊杰",@"胡夏",@"邱永傳", nil]; 

    pickerData=dataArray; 

//     添加按鈕    
    CGRect frame = CGRectMake(120, 250, 80, 40); 
    UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    selectButton.frame=frame; 
    [selectButton setTitle:@"SELECT" forState:UIControlStateNormal]; 

    [selectButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    [self.view addSubview:selectButton]; 

}


4.實現UIPickerView的代理方法,將數據顯示在選取器上所需要幾個方法
復制代碼 代碼如下:

#pragma mark - 
#pragma mark Picker Date Source Methods 

//返回顯示的列數 
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

    return 1; 

//返回當前列顯示的行數 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 

    return [pickerData count]; 

#pragma mark Picker Delegate Methods 

//返回當前行的內容,此處是將數組中數值添加到滾動的那個顯示欄上 
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

    return [pickerData objectAtIndex:row]; 


前兩個是數據源的代理方法,一個是返回列,有幾個選取器就返回幾,第二個是設置選取器有多少行,因為就這一個選取器,所以直接返回行數,即數組元素個數多少;第三個代理方法是將數組元素添加到了選取器上面顯示;

說一下兩個協議實例方法

UIPickerViewDelegate中的實例方法

復制代碼 代碼如下:

// 當用戶選擇某個row時

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

// 當其在繪制row內容,需要row的高度時

(CGFloat) pickerView:(UIPickerView *)pickerView rowHeightForComponent: (NSInteger) component
// 返回指定component.row顯示的文本

(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger) component
// 當picker view需要給指定的component.row指定view時,調用此函數.返回值為用作row內容的view

(UIView *)pickerView: (UIPickerView *)pickerView view ForRow:(NSInteger) row forComponent:(NSInteger) component reusingView:(UIView *) view
// row的寬度

(CGFloat)pickerView: (UIPickerView *)pickerView widthForComponent:(NSInteger) component


UIPickerViewDataSource中的實例方法

按照官方文檔的說法,UIPickerViewDataSource這個協議僅有的功能就是提供picker view中component的個數和各個component中的row的個數,雖然名為datasource,但是它工作于MVC的C中

本協議僅有兩個實例方法,均需要實現:

復制代碼 代碼如下:

// 返回列數

(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
// 返回每一列對應的行數

(NSInteger) pickerView:(UIPickerView *) pickerView numberOfRowsInComponent:(NSInteger) component


5.關于按鈕響應事件,關于按鈕的形成和添加響應事件不再提,前面都有,
復制代碼 代碼如下:

(void) buttonPressed:(id)sender 

     NSInteger row =[pickerView selectedRowInComponent:0]; 
     NSString *selected = [pickerData objectAtIndex:row]; 
     NSString *message = [[NSString alloc] initWithFormat:@"你選擇的是:%@",selected]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"  
                                                    message:message 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles: nil]; 
    [alert show]; 



@UIPickerView還有其他實例方法
復制代碼 代碼如下:

// 獲取指定列的行數

- (NSInteger) numberOfRowsInComponent:(NSInteger)component

// 刷新所有的列

(void) reloadAllComponents
// 刷新指定的列

(void) reloadComponent: (NSInteger) component

(CGSize) rowSizeForComponent: (NSInteger) component

// 獲取某列選擇的行數

(NSInteger) selectedRowInComponent: (NSInteger) component
// 選擇一行

(void) selectRow: (NSInteger)row inComponent: (NSInteger)component animated: (BOOL)animated

(UIView *) viewForRow: (NSInteger)row forComponent: (NSInteger)component

PS:多個component對應不同title的方法
有時候我們需要有多個component的UIPickerView并且對應不同的內容,比如地區的選擇,需要有省份和城市兩個選項,選擇不同的省份,城市要相應發生變化。

下面假設component數量為2。

使用指定title的函數,根據[pickerView selectedRowInComponent:0]的不同來指定第二個component的title

復制代碼 代碼如下:

- (NSString*)pickerView:(UIPickerView*)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
}

但此時,會發現切換省份后,城市一欄沒有辦法及時刷新。

我們還要指定刷新事件。

復制代碼 代碼如下:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    [pickerView reloadComponent:1];
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品国产三级国产aⅴ浪潮| 成人福利在线观看| 亚洲成成品网站| 欧美激情视频在线观看| 欧美国产日韩一区| 久久久精品美女| 久久99久久99精品免观看粉嫩| 国产精品国产亚洲伊人久久| 欧美老女人性生活| 午夜精品国产精品大乳美女| 国自产精品手机在线观看视频| 亚洲国产精品va在线观看黑人| 国产精品一区二区久久精品| 日韩精品视频在线观看免费| 久久在线精品视频| 亚洲精品少妇网址| 亚洲黄色有码视频| 欧美影院在线播放| 中文字幕成人精品久久不卡| 国产精品久久久久久五月尺| 韩国一区二区电影| 久久视频在线直播| 亚洲aa中文字幕| 久久97精品久久久久久久不卡| 中文字幕在线观看日韩| 菠萝蜜影院一区二区免费| 2019av中文字幕| 97在线看福利| 91在线精品视频| 俺去了亚洲欧美日韩| 一级做a爰片久久毛片美女图片| 欧美性在线视频| 国产成人高清激情视频在线观看| 欧美一级淫片aaaaaaa视频| 韩国视频理论视频久久| 91久久久国产精品| 91嫩草在线视频| 成人免费视频在线观看超级碰| 亚洲国内高清视频| 欧美视频专区一二在线观看| 亚州av一区二区| 久久精品国产亚洲| 欧美日韩国产123| 日韩电影中文字幕在线观看| 午夜精品一区二区三区在线播放| 国产精品视频久久久| 91精品久久久久久久久久| 美女性感视频久久久| 亚洲精品视频中文字幕| 国产一区二区美女视频| 亚洲国产天堂久久综合网| 91日韩在线播放| 色综合天天综合网国产成人网| 91sao在线观看国产| 久久噜噜噜精品国产亚洲综合| 91av视频导航| 欧美福利在线观看| 中文字幕九色91在线| 精品露脸国产偷人在视频| 97在线精品视频| 在线观看日韩av| 国产成人av网址| 亚洲国产精品推荐| 精品视频9999| 欧美日韩国产一区二区三区| 国产一区欧美二区三区| 日韩免费观看视频| 最近中文字幕mv在线一区二区三区四区| 国产精品自拍偷拍视频| 中文字幕国产精品| 深夜福利91大全| 日韩电影中文字幕一区| 国产成人精品亚洲精品| 欧美综合在线第二页| 久久久在线观看| 久久综合伊人77777尤物| 精品视频在线播放色网色视频| 5566日本婷婷色中文字幕97| 欧美性感美女h网站在线观看免费| 4p变态网欧美系列| 国产日韩在线视频| 久久免费成人精品视频| 欧美二区乱c黑人| 91在线免费视频| 国产久一一精品| 在线视频免费一区二区| 欧美激情综合亚洲一二区| 国外成人免费在线播放| 欧美精品做受xxx性少妇| 98精品国产高清在线xxxx天堂| 国产精品日韩久久久久| 在线观看精品国产视频| 久久精品国产99国产精品澳门| 久久精品中文字幕免费mv| 欧美网站在线观看| 国产午夜精品麻豆| 97视频免费在线看| 亚洲综合第一页| 国产精品久久久久久久久久久新郎| 97人人模人人爽人人喊中文字| 成人久久一区二区| 亚洲国产女人aaa毛片在线| 日韩视频免费观看| 国产视频欧美视频| 国产有码在线一区二区视频| 日韩女优人人人人射在线视频| 日韩av在线看| 粉嫩av一区二区三区免费野| 性欧美在线看片a免费观看| 亚洲情综合五月天| 日本精品久久久| 精品日韩视频在线观看| 88国产精品欧美一区二区三区| 久久久久国产一区二区三区| 精品国产一区二区三区久久狼5月| 日本精品免费观看| 性色av一区二区三区在线观看| 欧美一级bbbbb性bbbb喷潮片| 亚洲精品99999| 国产美女精彩久久| 欧美午夜精品在线| 精品日韩中文字幕| 欧美激情视频网址| 欧美国产一区二区三区| 岛国视频午夜一区免费在线观看| 91精品啪aⅴ在线观看国产| 亚洲精品少妇网址| 九九视频这里只有精品| 高潮白浆女日韩av免费看| 日本成人免费在线| 欧美与欧洲交xxxx免费观看| 精品自拍视频在线观看| 国产一区视频在线播放| 久久噜噜噜精品国产亚洲综合| 欧美激情一级精品国产| 欧美在线观看日本一区| 日韩在线播放一区| 777国产偷窥盗摄精品视频| 亚洲欧美激情四射在线日| 精品国产乱码久久久久酒店| 亚洲人成自拍网站| 国内精品国产三级国产在线专| 国产精品亚洲综合天堂夜夜| 91天堂在线视频| 精品一区二区三区三区| 亚洲热线99精品视频| 亚洲国产另类久久精品| 永久555www成人免费| 久久久久久久久中文字幕| 国产免费一区二区三区在线观看| 国产精品草莓在线免费观看| 亚洲视频在线免费观看| 久久久久五月天| 色中色综合影院手机版在线观看| 精品在线观看国产| 亚洲国产精品成人va在线观看| 91在线视频九色| 91av福利视频| 国产精品久久久| 欧美在线影院在线视频| 日韩电影免费观看在线| 国产精品麻豆va在线播放| 国产亚洲精品久久| 中文字幕视频在线免费欧美日韩综合在线看|