我是一個.NET程序員,新的客觀C.UIPickerView與NSDictionary
我想做一個UIPickerView行爲像一個.NET dropdownlist。用戶看到文本列表並選擇一個,並在代碼中使用所選值(即ID)。
我一直在瀏覽將近半天的時間,試圖找出答案。我可以添加一個帶有字符串列表的常規PickerView,具有多個組件的picker視圖和具有依賴組件的picker視圖,其中任何一個都不會回答我的查詢。
請幫忙。
我是一個.NET程序員,新的客觀C.UIPickerView與NSDictionary
我想做一個UIPickerView行爲像一個.NET dropdownlist。用戶看到文本列表並選擇一個,並在代碼中使用所選值(即ID)。
我一直在瀏覽將近半天的時間,試圖找出答案。我可以添加一個帶有字符串列表的常規PickerView,具有多個組件的picker視圖和具有依賴組件的picker視圖,其中任何一個都不會回答我的查詢。
請幫忙。
您可以使用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];
工作!謝謝 – Dave 2010-03-10 17:31:47
正是我在尋找,謝謝@DyingCactus! – 2014-01-01 20:09:30
我可以在Swift中得到這個代碼嗎 – 2014-12-18 13:58:45
的UIPickerView是不會看起來或行爲完全像.net下拉列表,但必要的功能在那裏。除了外觀,你有什麼特殊的問題嗎? – DyingCactus 2010-03-09 03:54:36
我只想爲UIPickerView的數據源使用鍵值對。看起來這是不可能的。 我有一個自定義NSObject [帶名稱和ID屬性]。我將名稱設置爲在UIPickerView上顯示。當用戶選擇一個名稱時,我需要找到名稱的ID並使用它。 感謝您的回覆。 – Dave 2010-03-09 18:04:13