2012-12-27 39 views
0

我正在學習使用UIPickerView對象並以編程方式創建一個對象。鑑於如果進行選擇,它會使用委託進行調用;將這些信息傳遞給實例化拾取器的主視圖控制器的標準做法是什麼?UIPickerView - 從代理獲取選擇

我想我會使用一個選擇器來允許代表發送選定的行到視圖控制器;有沒有更好的辦法?

任何人誰定期使用這些對象的幫助將不勝感激。

回答

1

實施委託方法- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component,以便每當選中一行時它將調用此方法。

你可以做這樣的事情:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    NSLog(@"row %d selected in component %d", row, component); 
} 
+0

謝謝 - 委託方法在視圖控制器的層下面,雖然這是處理應用程序。所以我在委託中有這個方法,但它需要將值返回給更高級別的控制器。 – Roddy

1

通常情況下,你的UIViewController該實例化的UIPickerView也將作爲其委託(和數據源)。在這種情況下,你會指定你的視圖控制器是選擇器的代表,如

[myPickerView setDelegate:self]; 

然後,你會實現你的視圖控制器內的方法- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component。當你指定一個對象作爲另一個對象的委託時,你會說「嘿,這個對象知道發送這些委託消息時該怎麼做」。在你的情況下,你說「我的主控制器知道當選擇器發送它didSelectRow:inComponent:消息時該怎麼做」。

在這樣做的過程中,您不需要執行任何使用選擇器來允許委託發送選定的行到視圖控制器廢話。這是代表的全部觀點! UIPickerView正在將工作「授權」給其他某個對象(您的控制器),該對象知道如何處理選擇器所選行中包含的信息。

+0

確實,但我發現的問題是我需要用先前設置的數據數組來實例化選擇器;我無法找到將這些數據傳遞給委託的方法,因爲實例化由UIPickView init在後臺處理。我想我雖然失去了一些東西...... – Roddy