CountryPicker 是 UIPickerView 的一个子类,提供了一种 iOS 控件,允许用户从列表中选择国家。它可以选择在每个国家名称旁边显示国旗,并且该库包含一组来自 https://github.com/koppi/iso-country-flags-svg-collection 的 249 个公有领域国旗图片,已重命名为与库一起使用。
请注意,国家列表基于 ISO 3166 国家代码标准 (http://en.wikipedia.org/wiki/ISO_3166-1)。该列表排除了某些较小国家,将它们视为更大国家的一部分。例如,英格兰、苏格兰、威尔士和北爱尔兰被合并为英国。对于大多数用途来说,这是完全可以接受的,因为它符合常用地区约定,但如果需要指定额外的国家,可以继承并修改“继承”下述的 countries 列表。
注意:“支持”意味着库与该版本进行了测试。“兼容”意味着库应该可以在该 iOS 版本上运行(即它不依赖于任何不可用的 SDK 特性),但不再测试兼容性,并且可能需要微调或错误修复才能正确运行。
从版本 1.1 开始,CountryPicker 需要 ARC。如果您希望在非 ARC 项目中使用 CountryPicker,只需将 -fobjc-arc 编译器标志添加到 CountryPicker.m 文件中。为此,进入目标设置中的“构建阶段”标签,打开“编译源文件”组,在列表中双击 CountryPicker.m,在弹出窗口中输入 -fobjc-arc。
如果您希望将整个项目转换为 ARC,则在 CountryPicker.m 中取消注释 #error 行,然后在 Xcode 中运行“编辑”>“重构”>“转换为 Objective-C ARC...”工具,并确保所有要使用 ARC 的文件(包括 CountryPicker.m)都被选中。
要在应用中使用CountryPicker,只需将CountryPicker类文件拖入您的项目。如果您想使用旗帜图标,还要将CountryPicker.bundle文件夹一起拖入。
CountryPicker类包含一些方便的方法来检索国家名称和代码,并在两者之间进行转换
+ (NSArray *)countryNames;
返回一个按字母顺序排列的所有国家名称的数组。
+ (NSArray *)countryCodes;
返回一个按国家名称排序的所有国家代码的数组。代码与其对应国家名称在countryNames
列表中的索引相匹配,但请注意,这意味着代码本身不是按字母顺序排序的。
+ (NSDictionary *)countryNamesByCode;
返回一个按国家代码键的国家名称字典。
+ (NSDictionary *)countryCodesByName;
返回一个按国家名称键的国家代码字典。
每个CountryPicker视图都有以下属性
@property (nonatomic, assign) id<CountryPickerDelegate> delegate;
委托。这实现了CountryPickerDelegate协议,并在选择国家时被通知。
@property (nonatomic, copy) NSString *selectedCountryName;
当前选定的国家名称。这是一个可读写属性,因此可以用来设置选择器的值。将选择器设置为不在countryNames
数组中的国家名称将没有任何效果。
@property (nonatomic, copy) NSString *selectedCountryCode;
当前选定的国家代码。这是一个可读写属性,因此可以用来设置选择器的值。将选择器设置为不在countryCodes
数组中的国家代码将没有任何效果。
@property (nonatomic, copy) NSLocale *selectedLocale;
这是一个通过区域设置设置/获取选定国家的一个便捷属性。选择器将自动根据区域设置选择正确的国家。要默认使选择器设置为当前设备的区域设置,您可以说
picker.selectedLocale = [NSLocale currentLocale];
- (void)setSelectedCountryCode:(NSString *)countryCode animated:(BOOL)animated;
- (void)setSelectedCountryName:(NSString *)countryName animated:(BOOL)animated;
- (void)setSelectedLocale:(NSLocale *)locale animated:(BOOL)animated;
这些方法允许您通过名称、代码或区域设置设置当前国家。它们与等效属性设置器的工作方式完全相同,但有一个可选的动画参数,可以使选择器平滑滚动到选定国家。
CountryPickerDelegate协议有一个单一强制性方法
- (void)countryPicker:(CountryPicker *)picker didSelectCountryWithName:(NSString *)name code:(NSString *)code;
每次在选择器中选择国家时都会调用此方法。
自版本1.0.2起,可以轻松地子类化CountryPicker来修改国家名称/代码列表。
要添加更多国家,覆盖+countryNamesByCode方法(无需覆盖+countryCodesByName,因为它是自动从+countryNamesByCode派生的)。
要更改显示顺序或显示(例如)美国或英国的重复副本在列表顶部,覆盖+countryNames方法(无需覆盖+countryCodes,因为它是从+countryNames和+countryCodesByName自动派生的)。
版本1.2.3
版本1.2.2
版本1.2.1
版本1.2
版本1.1
版本1.0.2
版本1.0.1
版本1.0