UIPickerView 選擇器

UIPickerView 繼承了UIView 沒有繼承UIControl? UIPickerView的時間處理由其委托對象完成

使用Component標明列 Row標明列中單個元素

numberOfCompinents:獲取UIPickerView 指定列中包含的列表項的數量。該屬性只讀

showsSelectionIndicator: 是否顯示UIPV中的選中標記(以高亮背景作為選中標記)

numberOfRowsInComponent: 獲取UIPV包含的列數量

rowSizeForCompinent:獲取UIPV包含的指定列中列表項的大小。該方法返回一個CGSize對象

selectRow:inComponent:animated:該方法設置選中該UIPV中指定列的特定列表項 最后一個 是否使用動畫

selectRowInCompinent:返回該UIPickerView指定列中悲酸中的列表項

viewForRow:forComponent:返回該UIPV指定列的列表項所使用的UIView控件

UIDatePicker只是負責該空間的通用行為,而該空間包含多少列,格列包含多少個列表項則有UIPickerViewDataSource對象負責

開發者必須weiUIPickerView設置UIPickerViewDataSource對象,并實現兩種方法:

numberOFComponentsInPickerView:該UIPickerView將通過該方法來判斷應該包含多少列

pickerView:numBerOfRowsInCompont:判斷指定列包含多少個列表項

UIPickerView需要控制各列額寬度,以及各列中列表項的大小和外觀,或程序需要為UIPicker的選中事件提供相應,都需要為UIPickerView設置UIPVDelegate委托對象,并根據需要實現該委托對象中的如下方法

-pickerView:rowHeightForCompinent:該方法返回的CGFloatz值將作為該UIPV控件中指定列中列表項的高度

-pickerView:widthForComponent:寬

-~titleForRow;forComponent:指定列的列表項的文本標題

~viewForRow:forComponent:reusingView:返回的UIPV控件中指定列的指定列表項

UIPV-InterfaceBuilder -ShowsSelectionIndicator 是否顯示UIPV中選中標記(高亮背景)

10.12.1 單列選擇器

- (void)viewDidLoad {

[super viewDidLoad];

self.books=[NSArray arrayWithObjects:@"第一項",@"第二項",@"第三項", nil];

self.pickerView=[[UIPickerView alloc]initWithFrame:CGRectMake(0, 20, 400, 500)];

self.pickerView.dataSource=self;

self.pickerView.delegate=self;

[self.view addSubview:self.pickerView];

// Do any additional setup after loading the view, typically from a nib.

}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 1;

}

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

return self.books.count;

}

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

//根據row參數返回books中的元素,row參數代表列表項的編號

//因此該方法表示第幾個列表項,就使用books中的第幾個元素

return [self.books objectAtIndex:row];

}

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

//使用一個UIAlertView來系那是用戶選中的列表項

UIAlertView* alert=[[UIAlertView alloc]

initWithTitle:@"提示" message:[NSString stringWithFormat: @"你選中的圖書是:%@",[self.books objectAtIndex:row]] delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];

[alert show];

}

10.12.2多項選擇器

- (void)viewDidLoad {

[super viewDidLoad];

_initState=0;

self.books=[NSArray arrayWithObjects:@"詩集1",@"詩集2",@"詩集3", nil];

self.haiMingWei=[NSArray arrayWithObjects:@"這里的黎明靜悄悄",@"老人與海", nil];

self.shaShiBiYa=[NSArray arrayWithObjects:@"十四行詩集",@"慕克白",@"哈姆萊特",@"羅密歐與朱麗葉", nil];

//? ? self.dict=[NSDictionary dictionaryWithObjectsAndKeys:self.books,@"葉慈",

// ? ? ? ? ? ? ? self.haiMingWei,@"海明威",

// ? ? ? ? ? ? ? self.shaShiBiYa,@"羅密歐與朱麗葉",nil];

self.author=[NSArray arrayWithObjects:@"海明威",@"莎士比亞",@"葉慈", nil];

self.pickerView=[[UIPickerView alloc]initWithFrame:CGRectMake(0, 20, 400, 500)];

self.pickerView.dataSource=self;

self.pickerView.delegate=self;

self.i=0;

[self.view addSubview:self.pickerView];

// Do any additional setup after loading the view, typically from a nib.

}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 2;

}

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

if (component==0) {

return? self.author.count;

}

if ([self.pickerView selectedRowInComponent:0]==0) {

return? self.haiMingWei.count;

}else? if ([self.pickerView selectedRowInComponent:0]==1) {

return? self.shaShiBiYa.count;

}else

return self.books.count;

}

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

//根據row參數返回books中的元素,row參數代表列表項的編號

//因此該方法表示第幾個列表項,就使用books中的第幾個元素

if (component==0) {

return? self.author[row];

}

switch ([self.pickerView selectedRowInComponent:0]) {

case 0:

return self.haiMingWei[row];

break;

case 1:

return self.shaShiBiYa[row];

break;

case? 2:

return? self.books[row];

break;

default:

return self.haiMingWei[row];

break;

}

}

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

//使用一個UIAlertView來系那是用戶選中的列表項

if (component==0) {

[self.pickerView selectRow:row inComponent:component animated:YES];

[self.pickerView reloadComponent:1];

}

}

實現了單列巡回滾動的UIPickerView

.h——————————————————————

@property (nonatomic) UIPickerView* pickerView;

@property (nonatomic) UIImage* lose;

@property (nonatomic) UIImage* win;

@property (nonatomic) NSMutableArray* images;

@property (nonatomic) UIImageView* view;

@property (nonatomic) UIButton* start;

@property (nonatomic) UIImageView* image;

@property (nonatomic,strong) NSArray* imagesTemp;//原圖片序列

@property (nonatomic,strong) NSMutableArray* comArr;//控制每一列的圖片,每一序列是picker一列的所有圖片集合

.m——————————————————————

- (void)viewDidLoad {

[super viewDidLoad];

UIImage* dog=[UIImage imageNamed:@"./images/dog.png"];

UIImage* duck=[UIImage imageNamed:@"./images/duck.png"];

UIImage* elephant=[UIImage imageNamed:@"./images/elephant.png"];

UIImage* frog=[UIImage imageNamed:@"./images/frog.png"];

UIImage* mouse=[UIImage imageNamed:@"./images/mouse.png"];

UIImage* rabbit=[UIImage imageNamed:@"./images/rabbit.png"];

self.lose=[UIImage imageNamed:@"./images/lose.jpg"];

self.win=[UIImage imageNamed:@"./images/win.gif"];

self.images=[NSMutableArray arrayWithObjects:dog,duck,

elephant,frog,mouse,rabbit, nil];

self.imagesTemp=[NSMutableArray arrayWithArray:self.images];

self.comArr=[NSMutableArray arrayWithObjects:

self.imagesTemp,

self.imagesTemp,

self.imagesTemp,

self.imagesTemp,

self.imagesTemp,

self.imagesTemp

,nil];

//加載輸贏結果的圖標顯示

self.image=[[UIImageView alloc]initWithFrame:CGRectMake(190, 330, 40, 40)];

[self.view addSubview:self.image];

//加載主體

self.pickerView=[[UIPickerView alloc]initWithFrame:

CGRectMake(20, 20, 380, 200)];

self.pickerView.dataSource=self;

self.pickerView.delegate=self;

self.pickerView.userInteractionEnabled=NO;

[self.view addSubview:self.pickerView];

//加載開始按鈕

self.start=[UIButton buttonWithType:UIButtonTypeRoundedRect];

self.start.frame=CGRectMake(200, 400, 40, 50);

[self.start setTitle:@"開始" forState:UIControlStateNormal];

[self.start addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:self.start];

// Do any additional setup after loading the view, typically from a nib.

}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{

return 5;

}

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

return self.images.count;

}

#define kImageTag 1

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

if (view.tag!=kImageTag) {

view=[[UIImageView alloc]initWithImage:[self.comArr[component] objectAtIndex:row]];

view.tag=kImageTag;

view.userInteractionEnabled=NO;

}

return view;

}

-(CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{

return 40;

}

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

return 40;

}

-(void)clicked:(id)sender{

self.start.enabled=NO;

self.image.image=nil;

NSMutableDictionary* result=[[NSMutableDictionary alloc]

initWithCapacity:6];

NSURL* winSoundUrl=[[NSBundle mainBundle]

URLForResource:@"crunch" withExtension:@"wav"];

for (int i=0; i<5;i++) {

NSUInteger selectedVal=arc4random()%self.images.count;

//為了選擇器列之間不會互相影響,新建一個數組

NSMutableArray* arr=[NSMutableArray arrayWithArray:self.imagesTemp];

for (int j=0; j

[arr setObject: self.imagesTemp[(selectedVal+j)%self.images.count]

atIndexedSubscript:(j+3)%self.imagesTemp.count];

}

//將重新歸序的數組放入到第i列的中,重新加載

[self.comArr setObject:arr atIndexedSubscript:i];

[self.pickerView reloadComponent:i];

[self.pickerView selectRow:3 inComponent:i animated:YES];

//在result中已經為該隨機數記錄了出現次數

if ([result objectForKey:[NSNumber numberWithInt:selectedVal]]) {

//獲取result中該隨機數的出現次數

NSUInteger newCount=[[result objectForKey:

[NSNumber numberWithInt:selectedVal] ] integerValue];

//將result中該隨機數的出現次數+1

[result setObject:[NSNumber numberWithInt:(newCount+1)] forKey:[NSNumber numberWithInt:selectedVal]];

}else

{

//使用result記錄該隨機數的出現次數為1

[result setObject:[NSNumber numberWithInt:1] forKey:[NSNumber numberWithInt:selectedVal]];

}

//使用該變量記錄隨機數的最大出現次數

NSUInteger maxOccurs=1;

for (NSNumber* num in [result allKeys] ) {

//只要任何隨機數的出現次數大于maxOccurs

if ([[result objectForKey:num]integerValue]>maxOccurs) {

//使用maxOccurs保存該隨機數的出現次數

maxOccurs=[[result objectForKey:num] integerValue];

}

}

//如果某個隨機數的出現次數大于或等于3(既是界面出現了三個相同圖案

if (maxOccurs>=3) {

//如果贏了延遲0.5秒執行showWin方法,顯示結果

[self performSelector:@selector(showWin) withObject:nil afterDelay:0.5];

}else{

//

[self performSelector:@selector(showLose) withObject:nil afterDelay:0.5];

}

}

}

-(void)showWin{

self.image.image=self.win;

self.start.enabled=YES;

}

-(void)showLose{

self.image.image=self.lose;

self.start.enabled=YES;

}

//當運行后,圖片不顯示,則可能初始化加載的圖片為空,可能圖片路徑有問題,或者沒有加入到項目中

加入項目

1.使用addfileTo ? xCode左側右鍵

2.在target-BuildPhases-CompileSources 中加入圖片文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容