EMCCountryPickerController
EMCCountryPickerController
是一个视图控制器,允许用户从可搜索的列表中选择国家。可用的国家来自 ISO 3166-1 标准,API 使用 ISO 3166-1 alpha-2 两字母国家代码来表示国家。
特性
这个库提供了以下特性
- 可以从表格视图中的列表中选择国家。
- 可以使用搜索栏搜索列表。
- 国家旗帜显示在表格视图的单元格中的图像视图中,并且可以选择隐藏。
- 可以自定义旗帜的大小。
- 可以自定义旗帜边框的颜色和大小,并可以选择隐藏。
- 所有分配了 ISO 3166-1 alpha-2 双字母代码的国家都可用。
- 控制器展示的国家列表可以被过滤。
- 国家通过 NSLocale API 方法进行本地化
EMCCountryPickerController
展示的视图结构如下
- 搜索栏锚定在顶部布局指南的底部。
- 表格视图锚定在搜索栏的底部和底部布局指南的顶部。
- 该视图是一个全屏视图,设计为以模态方式展示。
视图显示国家列表,按国家名称排序,使用用户当前语言(如有),否则使用英语。在国名左侧显示该国的公共领域标志图片。
先决条件
此库使用Xcode 5.1.1和iOS 7.1构建。此库需要iOS >= 6.1。
此库需要ARC(自动引用计数)支持,如果没有ARC支持,编译将失败。
使用方法
必须通过调用视图控制器以模态方式呈现EMCCountryPickerController
。当选择国家时,EMCCountryPickerController
不会自身消失。相反,EMCCountryPickerController
实例将依赖于符合EMCCountryDelegate
协议的委托来接收国家选择事件并关闭它。委托可以通过使用countryDelegate
出口在接口构造商中设置,或者使用countryDelegate
属性程序化设置。当使用故事板时,由于出口无法连接到另一个控制器中的控制器,通常在prepareForSegue:sender:
中执行控制器设置。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"openCountryPicker"])
{
EMCCountryPickerController *countryPicker = segue.destinationViewController;
countryPicker.countryDelegate = self;
}
}
EMCCountryDelegate
协议定义了一个选择器,在选择了国家时被调用。
- (void)countryController:(id)sender didSelectCountry:(EMCCountry *)chosenCountry;
通常,调用视图控制器符合该协议,接收通知并关闭EMCCountryPickerController
实例。
- (void)countryController:(id)sender didSelectCountry:(EMCCountry *)chosenCountry;
{
// Do something with chosenCountry
[self dismissViewControllerAnimated:YES completion:nil];
}
搜索国家
视图提供了一个搜索栏,可用于按照名称筛选国家,如下面的截图所示。
选择要显示的国家集合
有时用户需要限制可选择的国家的集合,这可以通过以下属性实现。
@property (copy) NSSet *availableCountryCodes;
用户可以传递此控制器要显示的国家ISO 3166-1 alpha-2国家代码集合。如果国家代码无效,则控制器将失败并抛出异常。
以下代码片段将显示的国家集合限制为法国、意大利、西班牙和美国,如下面的截图所示。
countryPicker.availableCountryCodes = [NSSet setWithObjects:@"IT", @"ES", @"US", @"FR", nil];
显示和隐藏旗帜
旗帜默认可见,可以使用属性BOOL showFlags
来关闭显示。
旗帜大小
可以使用flagSize
属性来自定义旗帜大小。
countryPicker.flagSize = 20;
表格视图单元格行高将相应调整。
旗帜边框
默认情况下,在旗帜周围绘制一个灰色的0.5边框,以改善其在默认白色背景上的视觉效果。可以使用以下属性进行配置
BOOL drawFlagBorder
:启用旗帜边框。默认为YES
。UIColor *flagBorderColor
:设置边框颜色。默认为[UIColor grayColor]
。CGFloat flagBorderWidth
:设置边框宽度。默认为0.5f
。
本地化国家名称
EMCCountryPickerController
使用NSLocale API方法来本地化国家名称。
示例代码
库代码包含了名为EMCCountryPickerControllerDemo
的示例项目,该项目使用Storyboard突出了库的主要功能。
使用 CocoaPods 进行安装
EMCCountryPickerController
通过 CocoaPods 提供,您可以在 Podfile 中添加对它的依赖。
pod 'EMCCountryPickerController', ~> '1.0'
构建软件
获取 EMCCountryPickerController
源代码的推荐方式是下载 发布压缩包。
错误报告
错误报告可以在 官方 GitHub 仓库 中提交。
版权所有 © 2014-2015 Enrico Maria Crisostomo
保留所有权利。
以下条件得到满足的情况下,允许重新分配和使用源代码和二进制形式,无论是否修改:
-
源代码重新分配必须保留上述版权声明、本条件列表和以下免责声明。
-
二进制形式重新分配必须在文档中或与重新分配一起提供的其他材料中复制上述版权声明、本条件列表和以下免责声明。
-
未经事先书面许可,不得使用 {组织名称} 的名称或其贡献者的名称来认可或推广源自本软件的产品。
本软件由版权所有者和贡献者提供“现状”和任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或继发性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务的中断)承担责任,无论是否事先知道此类损害的可能性。