我有一个模态视图,它有两个选择器,一个日期选择器和一个带有类别和子类别的内容的双组件选择器
我根据第一个组件中选择的内容动态设置类别/子类别选择器的内容,以驱动第二个组件的内容。
当我将模态视图加载为新的模态视图并将所有内容设置为默认值时,它可以正常工作。显示今天的日期,类别/子类别选择器的第0行显示出来。如果我更改了值并退出模态视图,一切都很好,我在父视图中正确存储了选择器中的值。
我的挑战是当我加载具有特定值的模态视图以反映选择时。假设我在2014年2月18日完成了一项交易,该类别为“运输”,子类别为“培训”。
日期选择器显示正确的值,但如果选择是数组中的最后一个条目,则category / subcategory显示的值不正确。
让我说明一下:
说我的类别是: 餐饮,娱乐,杂货,杂项,交通
对于运输的子类别: 巴士,天然气,地铁,出租车,火车
如果我使用娱乐和音乐初始化选择器它看起来很好,但如果我使用Tranportation和Train初始化它,选择器显示杂项和出租车,因为运输和火车是阵列的最后一个元素。如果我用Transportation和Gas初始化它,它会显示为Miscellaneous and Gas。如您所见,运输总是显示为Miscallaneous,因为运输是阵列中的最后一个条目。
为了简化我的问题,我简化了代码:
- (void)viewDidLoad
{
[super viewDidLoad];
if (self.dateCreated) {
[self.datePicker setDate:self.dateCreated];
}
self.categoryArray = [[NSArray alloc] initWithObjects:@"Dining",@"Entertainment",@"Groceries",@"Miscellaneious",@"Transportation",nil];
self.subCategoryArray = [[NSArray alloc] initWithObjects:@"Bus",@"Gas",@"Subway",@"Taxi",@"Train", nil];
self.selectedCategoryRow = 4;
self.selectedSubCategoryRow = 4;
[self.categoryPicker selectRow:4 inComponent:0 animated:YES];
[self.categoryPicker selectRow:4 inComponent:1 animated:YES];
[self.categoryPicker reloadAllComponents]; // NOT REALLY NEEDED
}
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 2;
}
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
int num = 0;
if (0 == component) {
num = [self.categoryArray count];
} else if (1 == component) {
num = [self.subCategoryArray count];
} else {
NSLog(@"Unknown component %d", component);
}
return num;
}
我发现修复它的唯一方法就是如果在选择器的故事板中我取消选中AutoresizeSubviews。此时,选择器显示正确的值,但它看起来如此严重:
我可以在代码中做些什么来解决这个问题吗?
供参考,以下是故事板中选择器的配置方式:
为了解决这个问题,我在View do load中添加了这段代码:
self.categoryPicker.frame = CGRectMake(20, 332, 280, 216);
故事板中不需要更改自动调整大小的设置,因此我将其恢复。
如果这是黑客攻击,请告诉我。
答案 0 :(得分:1)
在调用reloadAllComponents后,您应该初始化选定的行。
[self.categoryPicker reloadAllComponents];
[self.categoryPicker selectRow:4 inComponent:0 animated:YES];
[self.categoryPicker selectRow:4 inComponent:1 animated:YES];
答案 1 :(得分:0)
要解决此问题,我在View do load中添加了此代码:
self.categoryPicker.frame = CGRectMake(20, 332, 280, 216);
故事板中不需要更改自动调整大小的设置,因此我将其恢复。