9

我是一名 .NET 程序员,并且是 Objective C 的新手。

我正在尝试制作一个类似于 .NET 下拉列表的 UIPickerView。用户看到文本列表并选择一个,然后在代码中使用所选值(即 ID)。

我已经浏览了将近半天试图弄清楚这一点。我可以添加一个带有字符串列表的常规 PickerView、带有多个组件的选择器视图和带有依赖组件的选择器视图,这些组件似乎都没有回答我的查询。

请帮忙。

4

1 回答 1

14

您可以使用 NSDictionary 作为 UIPickerView 的数据源,但如果您有一个已经包含键/值对的自定义 NSObject,那么使用这些对象的 NSArray 作为数据源会更简单。

假设自定义对象是具有属性 planetId (int) 和 planetName (NSString) 的 Planet。创建一个名为 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];
于 2010-03-10T13:47:52.817 回答