2010-06-03 4 views
0

4 개의 배열을 가진 클래스가 있습니다 : tab_1, tab_2, tab_3 및 tab_T. 피커의 위임 및 데이터 소스를 self (배열을 포함하는 클래스)로 설정합니다.하나의 선택기, 데이터 소스에 대한 여러 배열 - 잘 작동하지만 어떻게?

텍스트 필드가 편집을 시작할 때 선택 도구가 호출됩니다. 키보드가 보이지 않게하기 위해 NO를 반환합니다. 대신 피커를 움직이는 방법이 있습니다.

어떤 텍스트 필드를 터치했는지에 따라 다음을 수행합니다. tab_T = tab_1; 또는 2 또는 3

제 의견으로는이 할당은 tab_T를 선택기의 데이터 소스로 만듭니다. 이 할당은 실제로 데이터 소스에 tab_T 배열을 바인딩합니까? 수동으로 할당하는 방법이 있습니까? 나는 확신한다. 그러나 picker.datasource = tab_1이 작동하지 않습니다. 내가 가진 "경고 : 클래스 'NSMutableArray' 'UIPickerViewDataSource'프로토콜을 구현하지 않습니다.

내 첫 앱 아마도 내 앱의 초기 단계에서 잊어 버린 단계 일 것입니다.

앞으로도 기꺼이 도와 드리겠습니다.

Wallou

답변

2

UIPickerView의 데이터 소스는 UIPickerViewDataSource 프로토콜을 구현하는 클래스이어야한다. 배열을 말하는 당신은 본 적이 오류를 ...

pickerView.datasource=someArray; 

생성

있는 NSArray 이후
– numberOfComponentsInPickerView: 
– pickerView:numberOfRowsInComponent: 

사용 프로토콜을 구현하지 않습니다 피커 뷰의 채우기는 이러한 두 가지 방법으로 이루어집니다 프로토콜을 구현하지 않습니다.

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ 
    return 1; //or whatever 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ 
    return [self.tab_T count]; // assuming just one component 
} 
:

@interface MyControllerClass: UIViewController <UIPickerViewDataSource,UIPickerViewDelegate> 

은 다음과 같을 것이다 프로토콜의 메소드를 구현해야합니다

당신이해야 할 첫 번째 일은 컨트롤러는 프로토콜과 같이 구현을 선언하는 것입니다

실제로 구성 요소를 채우려면 UIPickerViewDelegate 메서드가 필요합니다. (나는 그것이 데이터 소스는 데이터를 알고 있지만 어떤 이유가 거꾸로을 제공해야한다는 것 알고있다.)

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ 
    return [self.tab_T objectAtIndex:row]; //assuming one component 
} 

여기서 핵심 아이디어는 데이터 소스 및 위임 방법을 구현하는 객체가 역할을한다는 것입니다 피커와 실제로 데이터를 보유하고있는 데이터 구조 사이의 인터페이스. 이 경우에는 단순한 배열이지만 Core Data, SQL 또는 URL에서 다운로드 한 내용이 될 수 있습니다.

pickerview는 결코 데이터 구조를 전혀 다루지 않습니다. 항상 데이터 소스를 구현하고 상호 작용하는 메소드를 위임하는 것은 객체입니다.

+0

아침 TechZen, Ok, 답장을 보내 주셔서 감사합니다. 피커의 동작이 더 잘 이해됩니다. 안녕, 월루 – wallou