1

我正在使用应用程序处理核心数据,其中一个视图是 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 太大了,我想在 picker1 中添加一个 UISegmentedControl,以便它可以更好地对 array1 的信息进行排序。我知道 UISegmentedControl 只是一组漂亮的按钮,需要链接 IBAction 和其他东西,但是我如何实现它以便在我的一个视图中,第一个视图,只有 picker1 和 array1 由 UISegmentedControl 管理?是否有可能使它成为一个平滑的排序过程?我想我会根据我在 UISegmentedControl 中设置的条件将 array1 分解为其他数组,我如何链接它们以使它们看起来和工作良好?非常感谢您一如既往地提供有关此主题的任何帮助!谢谢

4

1 回答 1

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];
}
于 2010-01-25T20:47:56.257 回答