数据选择控件
就是帮助用户快速选择数据的控件。
UIPickerView
—
—
显示一组或多组数据方便用户选择。
作用
(1)从指定的数据源中选择数据;
(2)
通常以UITextField的inputView的形式出现
(当
选中某个文本框后, 弹出键盘中显示该控件)。
注意
使用
PickerView
之前
需要指定数据源对象和代理对象。需要使用到的两个协议:
UIPickerViewDataSource, 数据源协议。
UIPickerViewDelegate, 代理协议。
0. 加载数据源。
1.
设置控制器是当前
UIPickerView
的数据源对象和代理对象。
2
.
实现
数据源方法
numberOfComponentsInPickerView
:
返回列的个数。
3
.
实现
数据源方法pickerView:numberOfRowsInComponent:返回每列的行数。
4. 实现代理方法picke
rView:titleForRow
:
,
返回每行的数据
内容。
5
.
通过代理方法
pickerView:didSelectRow:inComponent
:
来监听UIPickerView的选择事件,例如将当前选中项的数据显示到指定的Label上。
设置默认选中项
当第一次加载好后,
Label
中显示的默认值。
手动调用
pickerView:didSelectRow:inComponent
:
方法
,
来设置默认选中项
,
设置每列的
第
0
行默认被选中。
for (
int
i
= 0;
i
<
self.dataList.count
;
i
++) {
[self
pickerView:nil
didSelectRow:0
inComponent:i
];
}
UIPickerView获取当前列的选中行索引
- (NSInteger)selectedRowInComponent:(NSInteger)component;
主动设置UIPickerView选中某项,并且在UIPickerView被选择后要做的事情。
调用
UIPickerView
的
selectRow:inComponent:animated
:仅仅设置了UIPickerView主动选中某项,
只会改变
UIPickerView
的选择
,
并不会调用
pickerView:didSelectRow:inComponent
:
方法。所以在调用前者后, 再手动调用一次代理方法pickerView:didSelectRow:inComponent:来做一些额外的事情。
UIPickerView的重新加载方法
- (void)
reloadAllComponents
;
- (void)reloadComponent:(NSInteger)component;
上面两个方法表示重新刷新数据
,
即
:
重新调用数据源方法与代理方法。
生成随机数
arc4random
(
)%(n+1)
arc4random_uniform(n),
苹果推荐使用
都是C语言函数
随机生成一个无符号整数((0~ (2的32次方)-1))
随机生成一个 0–n 之间的数字
通过调用C语言的arc4random()函数,生成一个随机的无符号正数,用该数字与某个正数取余来得到一个随机数。比如要得到一个0-11之间的随机数,那么就用 arc4random() % 12。也可以使用: arc4random_uniform(12), 意思一样。
避免当前生成的随机数, 与当前选择的项一致
获取当前列中的选择项的索引
NSUInteger
currentIndex
= [
self.pickerView Food
selectedRowInComponent:i
];
一开始假设两个值相同。
NSUInteger temp
Index
=
currentIndex
;
do {
//产生随机数
tempIndex
=arc4random() % self.dataList[i]
} while (
temp
Index == currentIndex);