2014-01-16 2 views
1

나는 이것에 관해서 많은 질문을 발견했다. 그러나 제안 된 모든 해결책은 위임자 방법에서 피커 1이나 피커 2를 구별하는 것처럼 보인다.두 개의 서로 다른 데이터 소스를 두 개의 UIPickerView에 할당하는 방법은 무엇입니까?

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    NSArray *values = (pickerView == picker1 ? values1 : values2); 
    return [values count]; 
} 

그러나 당신이 solution b)으로 전술 한 바와 같이 두 개의 선택기를 구분하지 않고이를 달성하기 위해 별도의 파일에 캡슐화 된 두 개의 서로 다른 데이터 소스를 할당 할 수있는 솔루션이있을 것 같다.

이제 약간 혼란 스럽습니다. 두 피커를 사용하여 뷰의 FileOwner로 설정 한 ViewController가 있다고 가정 해 보겠습니다. 이제 <UIPickerViewDataSource><UIPickerViewDelegate>을 준수하는 두 개의 개별 인터페이스를 만드는 경우보기에서이 두 인터페이스로 피커를 어떻게 바인딩합니까? 확실히 ViewController (FileOwner)로 가져올 수 있습니다. 하지만 그 다음엔?

답변

0

xib/storyboard에서 뷰를 생성한다고 가정하면 가장 간단한 방법은 뷰 컨트롤러의 viewDidLoad 메서드에서 두 뷰에 대한 콘센트를 설정하고 데이터 소스/위임자를 설정하는 것입니다.

-(void)viewDidLoad 
{ 
    self.myDataSource1 = [[MyDataSource1 alloc] init]; 
    self.myDataSource2 = [[MyDatasource2 alloc] init]; 

    self.pickerOne.delegate = self.myDataSource1; 
    self.pickerOne.dataSource = self.myDataSource1; 
    self.pickerTwo.delegate = self.myDataSource2; 
    self.pickerTwo.dataSource = self.myDataSource2; 
} 

... 여기서 MyDataSource1 및 MyDataSource 2는 위임자 역할을하기 위해 만든 클래스입니다.

0

MyClass가 선택기 데이터 소스 및 위임 메소드를 준수한다고하자.
또한 다음과 같은 공개 속성이 있습니다. UR 뷰 컨트롤러에서 이제

@property NSInteger rows; 
@property NSArray *data; 
.... others properties that you set which you will return in delegate methods. 

, 유사 delegate2 picker2에 대한 위임 등

MyClass *delegate1 = [MyClass alloc] init] 
delegate1.rows = numberOfRowsInPicker1; 
delegate1.data = picker1Data; 
// set other public properties of delegate1 
picker1.delegate=delegate1; 
picker1.datasource=delegate1; 

.

관련 문제