0

我在ApplicationConstants.h文件中创建了一个枚举,枚举如下。

typedef enum { CurrentLocation = 0, CurrentCity, CurrentRegion } enumLocation;

现在的问题是我不知道如何将此枚举设置为UIPickerView中的数据源!谁能给我这个想法?我以前使用NSArray作为数据源。但我现在想要枚举。因为这个问题,我卡住了。你能帮助我吗 ?所以我可以继续我的申请。

4

3 回答 3

0

您不能直接显示枚举的标识符。您必须准备一个大的 if/else/switch 块来为每个元素准备一个字符串,或者为数组中的每个元素添加字符串并从那里按索引选择。

在程序中通常使用枚举类型而不是幻数,因此旨在使代码更容易被人类阅读,但底层表示是一种基本数据类型(int、char 等)。

于 2012-07-31T12:11:20.917 回答
0

对于 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];
于 2014-05-15T11:26:25.223 回答
0

您可以选择为其实例定义简单宏的方式,如下所示:

在头文件(.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
)

如果我没有误解你的问题,那就是你在寻找......

于 2014-05-15T14:38:46.077 回答