IOS 開(kāi)發(fā)之PickerView文字和隨機(jī)數(shù)的使用
IOS 開(kāi)發(fā)之PickerView文字和隨機(jī)數(shù)的使用
PickerView用于展示供選擇的內(nèi)容(例如日期選取、點(diǎn)菜等)。
有三種情況:
1.每一列都是獨(dú)立的選取
2.右邊的列受到左邊列的影響
3.包含圖片
PickerView和TableView類似,通過(guò)數(shù)據(jù)源來(lái)顯示數(shù)據(jù),與TableView同樣地,讓控制器稱為其數(shù)據(jù)源。
但是PickerView的數(shù)據(jù)源僅僅提供行數(shù)和列數(shù),在代理方法內(nèi)才能設(shè)置內(nèi)容。
通過(guò)兩個(gè)數(shù)據(jù)源方法設(shè)置行和列數(shù),通過(guò)一個(gè)代理方法來(lái)設(shè)定內(nèi)容,注意component表示第幾列:
這里的foods成員是一個(gè)復(fù)合數(shù)組,即NSArray內(nèi)又有多個(gè)NSArray,每個(gè)內(nèi)層的NSArray中放著一個(gè)類型的食物,不同內(nèi)層NSArray之間代表不同類型的食物。
要得到這樣的復(fù)合數(shù)組,可以直接建立,例如:
@[@[...],@[...],@[...]];
或者通過(guò)plist讀取
#pragma mark - PickerView數(shù)據(jù)源方法 // returns the number of 'columns' to display. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return self.foods.count; } // returns the # of rows in each component.. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ NSArray *foodArray = self.foods[component]; // component是列 return foodArray.count; } #pragma mark - PickerView代理方法 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ return self.foods[component][row]; }
要監(jiān)聽(tīng)選擇,只需要再實(shí)現(xiàn)一個(gè)代理方法:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ NSString *name = self.foods[component][row]; switch (component) { case 0: self.fruitLabel.text = name; break; case 1: self.mainLabel.text = name; break; case 2: self.drinkLabel.text = name; break; default: break; } }
一個(gè)細(xì)節(jié):沒(méi)有點(diǎn)選時(shí)的顯示數(shù)據(jù)初始化:
間接利用上面的選擇方法來(lái)初始化數(shù)據(jù):每列都選中第0行,由于用不到pickerView本身,因此傳入nil也無(wú)妨。
for (int i = 0; i < self.foods.count; i++) { [self pickerView:nil didSelectRow:0 inComponent:i]; }
Tip:鍵盤上方常常用導(dǎo)航工具條,用于切換上一項(xiàng)、下一項(xiàng)等內(nèi)容。
直接獲取當(dāng)前的選取項(xiàng):selectRowInComponent: 傳入列號(hào)可以得到選中的是第幾行。
隨機(jī)數(shù):
arc4random()可以產(chǎn)生0或者正整數(shù),要產(chǎn)生0 ~ (x-1)的隨機(jī)數(shù),應(yīng)該使用 arc4random( ) % x。
關(guān)于選擇層次的設(shè)計(jì)(選擇左邊右邊變化),是由代碼實(shí)現(xiàn)的(更換列的數(shù)據(jù))。
需要用到reloadAllComponents或者reloadComponent:方法。
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
詳解iOS開(kāi)發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式
這篇文章主要介紹了iOS開(kāi)發(fā)中app的歸檔以及偏好設(shè)置的存儲(chǔ)方式,示例代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12iOS對(duì)數(shù)組進(jìn)行排序的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家講解了ios對(duì)數(shù)組進(jìn)行排序的實(shí)例方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08ios開(kāi)發(fā)navigationController pushViewController 方式多次跳轉(zhuǎn)返回到最上層返回到
這篇文章主要介紹了ios開(kāi)發(fā)navigationController pushViewController 方式多次跳轉(zhuǎn)返回到最上層返回到指定的某一層的實(shí)現(xiàn)方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09iOS開(kāi)發(fā)之UITableView與UISearchController實(shí)現(xiàn)搜索及上拉加載,下拉刷新實(shí)例代碼
這篇文章主要介紹了iOS開(kāi)發(fā)之UITableView與UISearchController實(shí)現(xiàn)搜索及上拉加載,下拉刷新實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-04-04iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程
這篇文章主要介紹了iOS中使用URL Scheme進(jìn)行App跳轉(zhuǎn)的教程,比如在應(yīng)用內(nèi)提示安裝另一個(gè)應(yīng)用時(shí)就以u(píng)rl打開(kāi)safari然后打開(kāi)app store那樣,需要的朋友可以參考下2016-04-04iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置
這篇文章主要介紹了iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03