【问题标题】:Using a UISegmentedControl to switch between multiple arrays using a uipickerview使用 UISegmentedControl 使用 uipickerview 在多个数组之间切换
【发布时间】:2010-01-25 19:27:54
【问题描述】:

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

【问题讨论】:

    标签: iphone objective-c uipickerview uisegmentedcontrol


    【解决方案1】:

    使用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];
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 1970-01-01
      • 2015-09-23
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      相关资源
      最近更新 更多