UIPickerView에서 두 개의 데이터 소스를 처리 할 수 있습니까?두 개의 데이터 소스로 UIPickerView를 처리하는 방법은 무엇입니까?
여기에는 피커 뷰의 표시를 제어하는 분할 된 컨트롤이 있습니다. 예를 들어, 첫 번째 세그먼트를 클릭하면 피커가 사람의 이름을 표시합니다. 그런 다음 두 번째 세그먼트를 클릭하면 선택 도구가 장소의 이름을 표시합니다.
감사
UIPickerView에서 두 개의 데이터 소스를 처리 할 수 있습니까?두 개의 데이터 소스로 UIPickerView를 처리하는 방법은 무엇입니까?
여기에는 피커 뷰의 표시를 제어하는 분할 된 컨트롤이 있습니다. 예를 들어, 첫 번째 세그먼트를 클릭하면 피커가 사람의 이름을 표시합니다. 그런 다음 두 번째 세그먼트를 클릭하면 선택 도구가 장소의 이름을 표시합니다.
감사
이 상태에 따라, 당신의 UIPickerView 대표 (UIPickerViewDelegate 및 UIPickerViewDataSource)에서 분할 컨트롤의 상태를 확인하고 필요한 값을 반환 할 수 있습니다.
물론 두 개의 개체 (필요한 프로토콜 준수)를 만들고 세그먼트 상태 변경시 대리자를 다시 설정할 수 있습니다. 그러나 나는이 방법이 일반적으로 더 나쁘다고 생각한다.
UIPickerView는 한 번에 하나의 데이터 소스 만 가질 수 있습니다. 그러나 사용자가 세그먼트를 변경하면 데이터 소스를 전환 할 수 있습니다. 피커보기의 대리자는 피커의 실제 콘텐츠를 제공하는 대리인이므로 변경해야합니다.
다음은 UIPickerViewDataSource 및 UIPickerViewDelegate를 구현하는 두 개의 개체가있는 예제입니다. titleForRow : 세그먼트 제어를 보면 forComponent
- (void)segmentedControlValueChanged { switch (segmentedControl.selectedSegmentIndex) { case 0: pickerView.delegate = personDelegate; pickerView.dataSource = personDelegate; break; case 1: pickerView.delegate = placeDelegate; pickerView.dataSource = placeDelegate; break; default: break; } [pickerView reloadComponent:0]; }
하지만 솔직히, 난 더 나은 솔루션은 당신의 pickerView을 가지고 생각 : 컨트롤의 세그먼트 중 하나에 사용자가 클릭 할 때이 방법은 호출된다. 사람과 장소라는 두 개의 NSArrays가있는 것으로 가정합니다.
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString *result; switch (segmentedControl.selectedSegmentIndex) { case 0: result = [self.persons objectAtIndex:row]; break; case 1: result = [self.places objectAtIndex:row]; break; default: result = @"Error!"; break; } return result; } - (void)segmentedControlValueChanged { [pickerView reloadComponent:0]; }
감사합니다. –