2010-03-09 33 views
9

我是一個.NET程序員,新的客觀C.UIPickerView與NSDictionary

我想做一個UIPickerView行爲像一個.NET dropdownlist。用戶看到文本列表並選擇一個,並在代碼中使用所選值(即ID)。

我一直在瀏覽將近半天的時間,試圖找出答案。我可以添加一個帶有字符串列表的常規PickerView,具有多個組件的picker視圖和具有依賴組件的picker視圖,其中任何一個都不會回答我的查詢。

請幫忙。

+0

的UIPickerView是不會看起來或行爲完全像.net下拉列表,但必要的功能在那裏。除了外觀,你有什麼特殊的問題嗎? – DyingCactus 2010-03-09 03:54:36

+0

我只想爲UIPickerView的數據源使用鍵值對。看起來這是不可能的。 我有一個自定義NSObject [帶名稱和ID屬性]。我將名稱設置爲在UIPickerView上顯示。當用戶選擇一個名稱時,我需要找到名稱的ID並使用它。 感謝您的回覆。 – Dave 2010-03-09 18:04:13

回答

13

您可以使用NSDictionary作爲UIPickerView的數據源,但是如果您有一個已經包含鍵/值對的自定義NSObject,那麼使用這些對象的NSArray作爲數據源會更簡單。

假定自定義對象是Planet屬性planetId(int)和planetName(NSString)。創建一個名爲planets的NSArray,其中的對象按照您希望它們出現在選取器中的順序創建(它們不必按planetId順序排列)。

在titleForRow,你會怎麼做:

return ((Planet *)[planets objectAtIndex:row]).planetName; 

在didSelectRow,讓所選擇的星球:

Planet *selectedPlanet = (Planet *)[planets objectAtIndex:row]; 

//
//
有了一個NSDictionary,你必須將鍵值映射到選取器的行號。一種方法是將關鍵值設置爲行號並將自定義對象添加爲值。

所以詞典將這樣創建:

NSArray *keys = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", nil]; 
NSArray *values = [NSArray arrayWithObjects:mercury, venus, earth, mars, nil]; 
items = [[NSDictionary dictionaryWithObjects:values forKeys:keys] retain]; 

在titleForRow,你會怎麼做:

NSString *itemKey = [NSString stringWithFormat:@"%d", row]; 
Planet *planet = (Planet *)[items objectForKey:itemKey]; 
return planet.planetName; 

在didSelectRow,你會怎麼做:

NSString *itemKey = [NSString stringWithFormat:@"%d", row]; 
Planet *selectedPlanet = (Planet *)[items objectForKey:itemKey]; 
+0

工作!謝謝 – Dave 2010-03-10 17:31:47

+1

正是我在尋找,謝謝@DyingCactus! – 2014-01-01 20:09:30

+1

我可以在Swift中得到這個代碼嗎 – 2014-12-18 13:58:45