UIPickView和UIDatePicker
- 1.UIPickView什么時候用?
? 通常在注冊模塊,當用戶需要選擇一些東西的時候,比如說城市,往往
彈出一個PickerView給他們選擇沮稚。 ? 老虎機效果
- 2.UIPickView常見用法,演示實例程序
- 1>獨立的,沒有任何關(guān)系 =>菜單系統(tǒng)。
- 2>相關(guān)聯(lián)的,下一列和第一列有聯(lián)系=>省會城市選擇
- 3>圖文并帽,=>國旗選擇。
- 3.UIPickView
- 4.UIDatePicker什么時候用? 當用戶選擇日期的時候,一般彈出一個UIDatePicker給用戶選擇片吊。
- 5.UIDatePickerios6和ios7的區(qū)別
點餐系統(tǒng)PickerView
- 1.搭建界面
- 1> 注意點:PickerView的高度不能改,默認162,PickerView里面每行的高度 可以改,不要弄混淆了吓揪。
- 2.pickerView顯示數(shù)據(jù)
- 1> 如何使用PickerView展示數(shù)據(jù)? 進入PickerView頭文件,有數(shù)據(jù)源和代理,聯(lián)想到UITableView,模仿 UITableView的用法监憎。
- 2> 讓控制器作為PickerView的數(shù)據(jù)源,控制器遵守PickerView的數(shù)據(jù)源方法
- 2.1>兩種方式:1.拖線 2.代碼 - - -
- 2.2>系統(tǒng)自帶的控件,數(shù)據(jù)源和代理屬性不需要IBOutlet,也能拖 線庆揩。自己的屬性,想要拖線,必須寫IBOutlet膳叨。
- 3> PickerView的數(shù)據(jù)源方法
- 1> numberOfComponentsInPickerView: 返回多少列
- 2> pickerView:numberOfRowsInComponent: 返回第component列有多少 行
- 3> 和UITableView的區(qū)別,每一行長什么樣,是由PickerView的代理決 定的洽洁。
- 4> 注意:如果沒有返回每一行長什么樣子,每行就會顯示?,看見?,就 知道沒有實現(xiàn)每一行長什么樣子的方法。
- 4> PickerView的代理方法
- 1> 返回第component列第row行長什么樣菲嘴。
第component列第row行的展示標題
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
第component列第row行帶屬性的標題
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger) component
第component列第row行展示的視圖
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
- gView:(UIView *)view;
- 2> 返回第component列每一行的高度和寬度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
- 3> 選中第component列第row行調(diào)用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
-
- 加載plist數(shù)據(jù)
- 1> 分析數(shù)據(jù)結(jié)構(gòu)
- 1> 大數(shù)組元素個數(shù):多少列
- 2>大數(shù)組里面的小數(shù)組: 這一列有多少行饿自。
- 3> 小數(shù)組里的字符串: 每行展示的樣子
- 4.處理菜單選中業(yè)務(wù)
- 1> 選中某一列某一行,顯示出來
- 2> 拖動不同列,改變不同的label,拖動第一列改變水果。
- 3> 判斷拖動哪一列,改變對應(yīng)的label
- 4> 在viewDidLoad中初始化label顯示
- 5> 取出數(shù)組中的數(shù)據(jù)給label直接賦值 _fruitLabel.text = self.foots[0][0]; 這種 方式不好,如果以后數(shù)組里有很多數(shù)據(jù),要寫很多行龄坪。
- 6> 還有另外一種方式,通過調(diào)用代理,給label賦值.唯一不同的,就是列 數(shù),搞個for循序就好了昭雌。
- 5.隨機選中某一列的某一行
- 1> 如何選中某一行 [self.pickerView selectRow:row inComponent:component
animated:YES];
- 2> 先隨機選中第0列的某一行,隨機數(shù)取值范圍看第0列總共有多少行,
arc4random_uniform(x)隨機0~x-1的數(shù)
- 3> 避免隨機出來的行數(shù)都一樣,需要判斷下,隨機出來的行數(shù)和當前選中 的是否一樣,一樣就重新隨機,用while判斷,直到隨機到不一樣,才行。
- 4> 問題:label沒有顯示最新選中的一行悉默。
原因:手動調(diào)用pickview滾動,選中某一行,不會觸發(fā)代理,我們自己 主動調(diào)用代理,讓lebel顯示選中哪一行.
注意:只有用戶手動滾動才可以觸發(fā)pickview的代理方法城豁。
- 5> 每一列都要隨機選中,弄個for循序,遍歷每一列都隨機選中
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者