1

私は app を使用してコア データに取り組んでおり、ビューの 1 つは EditingViewController です。これは、オブジェクトの属性を記述する多くの ui 要素のコントローラーとして機能します。EditingViewController 内では、すべての UI 要素が呼び出され、.hidden = YES/NO;操作で非表示になります。私のUI要素の1つはuipickerviewです。現在、2 つの異なるビューのそれぞれに 1 つの配列があります。つまり、ファースト ネーム フィールドをクリックすると、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 をリンクする必要があることはわかっていますが、最初のビューの 1 つで 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 に答える