如何在uipickerview中添加枚举作为数据源?

时间:2012-07-31 12:01:03

标签: objective-c ios enums xcode4.2 uipickerview

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

  

typedef enum {       CurrentLocation = 0,       当前城市,       CurrentRegion} enumLocation;

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

3 个答案:

答案 0 :(得分:0)

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

枚举类型通常用于代替程序中的幻数,因此旨在使代码更容易被人阅读,但底层表示形式是基本数据类型之一(int,char等)。 / p>

答案 1 :(得分: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];

答案 2 :(得分:0)

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

头文件中的

.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];

对象将是带有名称的字符串,但出于安全考虑,您可以通过记录_array来检查值:

NSLog(@"%@", _array);

它应该是这样的:

(
    CustomTypeUknown,
    CustomTypeSomething,
    CustomTypeParticularValue,
    CustomTypeBoringValue
)

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