我正在学习如何设置多个选择器,我对下面两个标记的部分有点好奇:
// METHOD_001
NSInteger row_001 = [doublePicker selectedRowInComponent:0];
NSInteger row_002 = [doublePicker selectedRowInComponent:1];
NSString *selected_001 = [pickerData_001 objectAtIndex:row_001];
NSString *selected_002 = [pickerData_002 objectAtIndex:row_002];
也许如果我简化一下......我知道METHOD_001正在做什么,但是下面的方法呢。如果我发表评论我的代码仍然运行但是选择器UI没有填充我的数据,所以它显然涉及从dataSource获取数据,以便选择器可以显示它。一个令人费解的方面是它使用“objectAtIndex:row”来访问一个项目,即使整个UI需要填充(即所有行)这是否意味着每个行调用它,看起来很有趣,它不需要NSArray nd一次性填充了选择器UI?
// DELEGATE
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if(component == kCoffeeIndex) return [pickerData_001 objectAtIndex:row];
return [pickerData_002 objectAtIndex:row];
}
加里
答案 0 :(得分:1)
每次UI认为需要数据时,都会调用委托方法-pickerView:titleForRow:forComponent:
。
它不需要数组,因为标题可以动态生成或懒惰检索。对于表格视图来说,它实际上是相同的故事。通常只会加载可见行,以减少所需的数据。