2013-03-04 5 views
1

One of Three Search Pages in my app that run off of th Class SearchViewController는 오브젝티브 C가 나는 모든 내 검색보기 컨트롤러의 오프 실행 세 가지 검색 페이지가 UIPickerViews

의 모든 인스턴스에 대해 서로 다른 수업을 할 필요합니까. 각각의 검색 방법은 다르지만 화면은 기본적으로 같습니다. 선택기에서 선택하면 텍스트 필드가 채워지고 위도와 경도는 지속적으로 업데이트되고 해당 입력란에 표시되는 기기입니다. 내 질문은 적절한 데이터를 적절히 추가하고 UIPickerViewDelegate를 준수하기 위해 해당 피커 뷰를 실행하기 위해 세 가지 클래스를 추가해야하는지 아니면 SearchViewController 클래스에서 PickerView를 정의하도록 허용 할 수 있습니까?

답변

1

SearchViewController를 각 UIPickverView의 위임자로 만드는 것은 가능합니다. SearchViewController의 인터페이스 (예 : @interface SearchViewController : UIViewController <UIPickerViewDelegate>)에 <UIPickerViewDelegate> 주석을 포함하고 컴파일러는 필요한 메소드가 누락 된 경우 유용하게 상기시켜줍니다. 그러나 6.1 이후에는 UIPickerViewDelegate 프로토콜에 필요한 메소드가 없습니다.

UIPickerViewDelegate 프로토콜의 모든 메서드는 첫 번째 인수로 UIPickerView를 사용합니다. 인수가 3 개의 개별 UIPickerView와 동일한 지 확인하고 각 뷰에 대해 필요에 따라 대리자 메서드의 동작을 수정합니다. 결국 다음과 같은 코드로 끝날 것입니다 :

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    if (pickerView == self.myFirstPickerView) { 
     return self.myFirstSearchMethodResultTitles[row]; 
    } else if (pickerView == self.mySecondPickerView) { 
     return self.mySecondSearchMethodResultTitles[row]; 
    } else if (pickerView == self.myThirdPickerView) { 
     return self.myThirdSearchMethodResultTitles[row]; 
    } else { 
     NSAssert(NO, @"Should not have reached this point!"); 
     return nil; 
    } 
}