2009-04-20 19 views
21

Chcę utworzyć 2 osobne przeglądarki w tym samym widoku przy użyciu tego samego obiektu viewController. Ale jak ustawić oddzielne dla nich delegatów i źródła danych?Wiele PickerViews w jednym widoku?

Wydaje się, że nie działa. Pojawiają się z tymi samymi danymi. Jeśli masz jakiś przykładowy kod na ten temat, będzie to bardzo cenne.

Dzięki.

Odpowiedz

32

pamiętać, że każda metoda zarówno źródłem danych i protokołów delegata zawierać parametr UIPickerView *, na przykład:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

Trzeba użyć go do rozróżnienia między dwóch przypadkach, a mianowicie:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 

    if([pickerView isEqual: pickerOne]){ 
     // return the appropriate number of components, for instance 
     return 3; 
    } 

    if([pickerView isEqual: pickerTwo]){ 
     // return the appropriate number of components, for instance 
     return 4; 
    } 
} 
+0

to działa świetnie, dzięki .. Jedynym problemem jest dostać ostrzeżenie, mówiąc: „Ostrzeżenie - kontrola osiągnięciu końca non funkcji void” wiesz czemu? –

+1

ahh .. OK, to dlatego, że może w końcu nic nie zwróciło, więc dodał jeszcze {return 0; } i błąd zniknął ... Jeszcze raz dziękuję wam obojgu .. Świetny helt: D –

+0

jak mogę przypisać różne wartości tablicowe do tych dwóch różnych UIPIckerów – MaheshBabu

15

Najprostszym sposobem, aby to zrobić, jest użycie właściwości pickerView o nazwie tag. Zwykle definiuję je w nagłówku dla czytelności. Możesz ustawić tag w Konstruktorze interfejsów lub w kodzie.

#define kPickerOne 0 
#define kPickerTwo 1 

Następnie w pliku implementacji ...

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    if(pickerView.tag == kPickerOne) 
    { 
      // do something with picker one 
    } 
    else if(pickerView.tag == kPickerTwo) 
    { 
      // the other picker 
    } 
}