標籤:ui ios 控制項 uipackervi picker
貓貓分享,必須精品
素材代碼地址:http://blog.csdn.net/u013357243/article/details/45057267
原創文章,歡迎轉載。轉載請註明:翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents
先看 ##
UIPickerView控制項UIPickerView用處:
用來展示很多行(row) 很多列(component )的資料,多用於電子商務的點菜,城市選擇等等。
UIPickerView用法:
他用起來跟tableView差不多,用法:
1:設定代理和資料來源
@interface NYViewController ()<UIPickerViewDataSource, UIPickerViewDelegate>
資料來源:UIPickerViewDataSource,
1,返回有多少列
2,返回有多少行
#pragma mark - UIPickerViewDataSource// 返回pickerView一共有多少列- (NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView{// return 3; return self.foods.count;}// 返回pickerView的第component列有多少行- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{// return 4; // 1.擷取對應列的數組 NSArray *subFoods = self.foods[component]; // 2.返回對應列的行數 return subFoods.count;}
代理UIPickerViewDelegate
返回第component列的第row行顯示什麼內容
#pragma mark - UIPickerViewDelegate// 返回第component列的第row行顯示什麼內容- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ // 1.擷取對應列的數組 NSArray *subFoods = self.foods[component]; // 2.擷取對應行的標題 NSString *name = subFoods[row]; return name;}
怎麼監聽選中哪一行
didSelectRow
當我們選中某一列某一行的時候, 我們就把相應的資料設定。
// 當選中了pickerView的某一行的時候調用// 會將選中的列號和行號作為參數傳入// 只有通過手指選中某一行的時候才會調用- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{// NSLog(@"component = %d, row = %d", component, row); // 1.擷取對應列對應行的資料 NSString *name = self.foods[component][row];// NSLog(@"name = %@", name); // 2.判斷選擇的是哪一列, 根據列號設定對應的資料 if (0 == component) { // 水果 self.fruitLabel.text = name; }else if (1 == component) { // 主菜 self.stapleLabel.text = name; }else { // 飲料 self.drinkLabel.text = name; }}
實現隨機事件
如何讓pickerView自己滾動到哪一行
selectRow inComponent讓pickerView主動的滾動到某一列某一行
- (IBAction)randomFood:(UIButton *)sender { // 讓pickerView主動選中某一行 // 讓pickerView選中inComponent列的Row行// [self.pickerView selectRow:1 inComponent:0 animated:YES]; /* [self.pickerView selectRow: arc4random() % 12 inComponent:0 animated:YES]; [self.pickerView selectRow: arc4random() % 15 inComponent:1 animated:YES]; [self.pickerView selectRow: arc4random() % 10 inComponent:2 animated:YES]; */// [self.foods objectAtIndex:0]; == self.foods[0];// [self.foods[0] count]; /* // 根據每一列的元素個數產生隨機值 [self.pickerView selectRow: arc4random() % [self.foods[0] count] inComponent:0 animated:YES]; [self.pickerView selectRow: arc4random() % [self.foods[1] count] inComponent:1 animated:YES]; [self.pickerView selectRow: arc4random() % [self.foods[2] count] inComponent:2 animated:YES]; */ for (int component = 0; component < self.foods.count; component++) { // 擷取對應列的資料總數 int total = [self.foods[component] count]; // 根據每一列的總數產生隨機數(當前產生的隨機數) int randomNumber = arc4random() % total; // 擷取當前選中的行(上一次隨機後移動到的行) int oldRow = [self.pickerView selectedRowInComponent:0];// NSLog(@"oldRow = %d", oldRow); // 比較上一次的行號和當前產生的隨機數是否相同, 如果相同重建 while (oldRow == randomNumber) { randomNumber = arc4random() % total; } // 讓pickerview滾動到某一行 [self.pickerView selectRow: randomNumber inComponent:component animated:YES]; // 通過代碼選中某一行 [self pickerView:nil didSelectRow:randomNumber inComponent:component]; }}
ps:建立iOS交流學習群:304570962 可以加貓貓QQ:1764541256 或則znycat 讓我們一起努力學習吧。
翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents
貓貓學IOS(二十)UI之UIPickerView_點菜系統