我是一名 .NET 程序员,并且是 Objective C 的新手。
我正在尝试制作一个类似于 .NET 下拉列表的 UIPickerView。用户看到文本列表并选择一个,然后在代码中使用所选值(即 ID)。
我已经浏览了将近半天试图弄清楚这一点。我可以添加一个带有字符串列表的常规 PickerView、带有多个组件的选择器视图和带有依赖组件的选择器视图,这些组件似乎都没有回答我的查询。
请帮忙。
我是一名 .NET 程序员,并且是 Objective C 的新手。
我正在尝试制作一个类似于 .NET 下拉列表的 UIPickerView。用户看到文本列表并选择一个,然后在代码中使用所选值(即 ID)。
我已经浏览了将近半天试图弄清楚这一点。我可以添加一个带有字符串列表的常规 PickerView、带有多个组件的选择器视图和带有依赖组件的选择器视图,这些组件似乎都没有回答我的查询。
请帮忙。
您可以使用 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];