一個UIPickerView的數據源必須是一個實現UIPickerViewDataSource協議的類。選擇器視圖的填充是在這兩種方法實現:
– numberOfComponentsInPickerView:
– pickerView:numberOfRowsInComponent:
由於使用的NSArray沒有實現協議:
pickerView.datasource=someArray;
...生成你已經看到了錯誤說數組不執行協議。
你需要做的第一件事就是聲明你的控制器實現的協議,像這樣:
@interface MyControllerClass: UIViewController <UIPickerViewDataSource,UIPickerViewDelegate>
,那麼你需要實現協議的方法,這將是這個樣子:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1; //or whatever
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return [self.tab_T count]; // assuming just one component
}
要實際填充組件,您需要UIPickerViewDelegate方法。 (我知道這似乎該數據源應該提供,你知道,數據,但由於某種原因,他們有它向後。)
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [self.tab_T objectAtIndex:row]; //assuming one component
}
這裏的關鍵思想是,實現了數據源和委託方法的對象作爲拾取器和任何數據結構實際上都包含數據之間的接口。在這種情況下,它只是簡單的數組,但它可以是任何東西,包括核心數據,SQL或從URL下載。
pickerview根本不會直接處理數據結構。它始終是實現進行交互的數據源和委託方法的對象。
morning TechZen, 好的, 感謝您的回答,清晰完整。 我現在明白更好的選擇器的行爲。沃爾沃再見, – wallou 2010-06-04 07:49:35