我正在使用app处理核心数据,其中一个视图是EditingViewController,它充当许多描述对象属性的ui元素的控制器。在EditingViewController中,我的所有ui元素都被.hidden = YES/NO;
操作调用和隐藏。我的一个ui元素是uipickerview。目前,两个不同视图中的每一个都有一个数组。这意味着,如果他们点击了第一个名字段,那么array1会加载到picker1中,然后他们会从中选择,然后如果他们点击了姓氏,则array2会加载到picker2中,生活也很好。这是我用来完成这项工作的代码:
- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
if (picker1 == self.picker) {
return [array1 objectAtIndex:row];
} else {
return [array2 objectAtIndex:row];
}
}
但是! array1是如此之大,我想将一个UISegmentedControl添加到picker1,以便它可以更好地排序array1的信息。我知道UISegmentedControl只是一组漂亮的按钮,要求IBActions链接和东西,但我怎么能实现它,以便在我的视图的一个中,第一个,只是picker1和array1是由UISegmentedControl管理?是否有可能使它成为一个平滑的分拣过程?我想我会根据我在UISegmentedControl中设置的条件将array1分解为其他数组,如何将它们链接起来以便它们外观和工作良好?任何有关此主题的帮助一目了然非常感谢!感谢
答案 0 :(得分:2)
使用selectedSegmentIndex属性。
例如:
enum {
SEGMENT1,
SEGMENT2,
SEGMENT3
};
- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
if (picker1 == self.picker) {
if (segmentedControl.selectedSegmentIndex == SEGMENT1) {
return [array1sub1 objectAtIndex:row];
} else if (segmentedControl.selectedSegmentIndex == SEGMENT2) {
return [array1sub2 objectAtIndex:row];
} else if (segmentedControl.selectedSegmentIndex == SEGMENT3) {
return [array1sub3 objectAtIndex:row];
}
} else {
return [array2 objectAtIndex:row];
}
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if (picker1 == self.picker) {
if (segmentedControl.selectedSegmentIndex == SEGMENT1) {
return [array1sub1 count];
} else if (segmentedControl.selectedSegmentIndex == SEGMENT2) {
return [array1sub2 count];
} else if (segmentedControl.selectedSegmentIndex == SEGMENT3) {
return [array1sub3 count];
}
} else {
return [array2 count];
}
}
此外,您需要在分段控件更改时重新加载选取器,因此您应该将分段控件的值更改事件与以下方法链接:
- (IBAction)handleValueChanged
{
[self.picker reloadAllComponents];
}