我在ApplicationConstants.h文件中创建了一个枚举,枚举如下。
typedef enum { CurrentLocation = 0, CurrentCity, CurrentRegion } enumLocation;
现在的问题是我不知道如何将此枚举设置为UIPickerView中的数据源!谁能给我这个想法?我以前使用NSArray作为数据源。但我现在想要枚举。因为这个问题,我卡住了。你能帮助我吗 ?所以我可以继续我的申请。
我在ApplicationConstants.h文件中创建了一个枚举,枚举如下。
typedef enum { CurrentLocation = 0, CurrentCity, CurrentRegion } enumLocation;
现在的问题是我不知道如何将此枚举设置为UIPickerView中的数据源!谁能给我这个想法?我以前使用NSArray作为数据源。但我现在想要枚举。因为这个问题,我卡住了。你能帮助我吗 ?所以我可以继续我的申请。
您不能直接显示枚举的标识符。您必须准备一个大的 if/else/switch 块来为每个元素准备一个字符串,或者为数组中的每个元素添加字符串并从那里按索引选择。
在程序中通常使用枚举类型而不是幻数,因此旨在使代码更容易被人类阅读,但底层表示是一种基本数据类型(int、char 等)。
对于 UIPickerViewDataSource
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return LOCATION_COUNT;
}
使用枚举计数的技巧
typedef enum { CurrentLocation = 0, CurrentCity, CurrentRegion, LOCATION_COUNT} enumLocation;
对于 UIPickerViewDelegate
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
[self.enumLocationStringDict objectForKey:[NSNumber numberWithInt:row]]
}
字典可以如下
self.enumLocationStringDict = [NSDictionary dictionaryWithObjectsAndKeys:
@"CurrentLocation", [NSNumber numberWithInt:CurrentLocation],
@"CurrentCity", [NSNumber numberWithInt:CurrentCity],
@"CurrentRegion", [NSNumber numberWithInt:CurrentRegion],
,nil];
您可以选择为其实例定义简单宏的方式,如下所示:
在头文件(.h)中:
#define NAMEOF(var) @#var
typedef enum : NSInteger {
CustomTypeUknown = 0,
CustomTypeSomething,
CustomTypeParticularValue,
CustomTypeBoringValue,
} CustomType;
在实施文件(.m)中
NSArray *_array = [NSArray arrayWithObjects:NAMEOF(CustomTypeUknown), NAMEOF(CustomTypeSomething), NAMEOF(CustomTypeParticularValue), NAMEOF(CustomTypeBoringValue), nil];
对象将是带有名称的字符串,但为了安全起见,您可以通过 logging 检查值_array
:
NSLog(@"%@", _array);
它应该是这样的:
(
CustomTypeUknown,
CustomTypeSomething,
CustomTypeParticularValue,
CustomTypeBoringValue
)
如果我没有误解你的问题,那就是你在寻找......