iOS選擇器組件

1. 框架介紹

BRPickerView 封裝的是iOS中經常使用的選擇器組件。高度封裝,只需一句代碼便可完成調用,使用比較靈活支持自定義主題顏色。選擇器類型主要包括:日期選擇器、時間選擇器、地址選擇器、自定義字符串選擇器。git

框架地址:github.com/91renb/BRPi…github

特別提示】:objective-c

  • 當前最新版本爲: 2.2.1
  • 若是不能找到最新版本,請先執行一下 pod setup ,待更新完成後;再執行 pod search BRPickerView 進行搜索,就會看到最新版本。

2. 效果演示

查看並運行 BRPickerViewDemo.xcodeprojjson

效果圖1
效果圖2
框架Demo運行效果圖1 框架Demo運行效果圖2

3. 更新記錄

  • 2018-04-27(V2.2.1):數組

    • 修復bug,適配iPad和橫屏顯示。
    • 優化代碼,提升框架適應性,下降內存消耗。
  • 2018-04-03(V2.2.0):xcode

    • 時間選擇器新添加了7種顯示類型(BRDatePickerMode),可根據本身項目的需求選擇性使用。
    • 適配橫屏,及 iPhoneX 底部安全區域。
    • 修改了最小時間和最大時間的參數名稱(之前版本是傳 NSString 類型, 如今傳 NSDate 類型)
    • 修復比較時間大小時出現的bug。
  • 2018-03-19(V2.1.3):安全

    • 修改地址選擇器確認選擇後的回調參數。
    • 現修改以下:可經過省市區的模型獲取省市區的 name(名稱)、code(id)、index(索引)resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {}
    • 去掉第三方依賴庫 MJExtension ,修改成手動解析地址數據源。
  • 2018-03-11(V2.1.2):微信

    • 重命名了Github用戶名,更新項目相關的路徑。(提示:pod以前的版本不受影響)
  • 2018-02-28(V2.1.1)框架

    • 修復某些狀況下沒法用bundle加載本地數據源(BRCity.plist)bug。
  • 2018-01-26(V2.1.0):優化

    • 給地址選擇器添加了一個方法(見方法4),提供數據源參數,支持外部傳入地區數據源。
    • 提示:要注意數據源格式,參考 BRCity.json。能夠把 BRCity.json 文件的內容放到後臺去維護,經過後臺接口獲取地區數據源(即 BRCity.json 文件的內容)。
  • 2018-01-25(V2.0.0)

    • 更新了地址數據源(BRCity.plist),地區信息是2018年最新最全的,與微信的地區信息徹底一致。
    • 支持自定義默認選擇地址(格式:@[@"浙江省", @"杭州市", @"西湖區"]),支持下次點擊進入地址選擇器時,默認地址爲上次選擇的結果。
    • 修改了日期選擇器、地址選擇器、字符串選擇器的接口方法(刪除了以前的方法2)。
    • 添加了地址選擇器顯示類型,支持3種顯示:只顯示省份、顯示省份和城市、顯示省市區。
  • 2018-01-05(V1.3.0):

    • 添加取消選擇的回調方法(點擊背景或取消按鈕會執行 cancelBlock

    • 合併了字符串選擇器 數組數據源和plist數據源對應的方法,dataSource 參數支持兩種類型:

      1> 能夠直接傳數組:NSArray類型;

      2> 能夠傳plist文件名:NSString類型,帶後綴名,plist文件的內容必須是數組格式。

  • 2018-01-02(V1.2.0)

    • 添加支持自定義主題顏色的方法。
  • 2017-11-26(V1.1.0)

    • 更換第三方依賴庫。

      用MJExtension 替換了 原來的YYModel,之前沒有注意導入YYModel,同時又導入YYKit會致使重複導入而衝突(另外使用YYModel時,手動導入和pod導入 其中的頭文件和方法名也不同,因此很容易出錯)。

  • 2017-11-16(V1.0.0)

    • 初始版本!

4. 安裝

4.1. CocoaPods

  1. 在 Podfile 中添加 pod 'BRPickerView'

  2. 執行 pod installpod update

  3. 導入頭文件 #import <BRPickerView.h>

4.2. 手動導入

  1. 將與 README.md 同級目錄下的 BRPickerView 文件夾拽入項目中

  2. 導入頭文件 #import "BRPickerView.h"

5. 系統要求

  • iOS 8.0+
  • ARC

6. 使用

6.1. 時間選擇器:BRDatePickerView

​ 查看 BRDatePickerView.h 頭文件,裏面提供了3個方法,可根據本身的需求選擇其中的一個方法進行使用。

/**
 *  1.顯示時間選擇器
 *
 *  @param title            標題
 *  @param dateType         日期顯示類型
 *  @param defaultSelValue  默認選中的時間(值爲空/值格式錯誤時,默認就選中如今的時間)
 *  @param resultBlock      選擇結果的回調
 *
 */
+ (void)showDatePickerWithTitle:(NSString *)title
                       dateType:(BRDatePickerMode)dateType
                defaultSelValue:(NSString *)defaultSelValue
                    resultBlock:(BRDateResultBlock)resultBlock;

/**
 *  2.顯示時間選擇器(支持 設置自動選擇 和 自定義主題顏色)
 *
 *  @param title            標題
 *  @param dateType         日期顯示類型
 *  @param defaultSelValue  默認選中的時間(值爲空/值格式錯誤時,默認就選中如今的時間)
 *  @param minDate          最小時間,可爲空(請使用 NSDate+BRPickerView 分類中和顯示類型格式對應的方法建立 minDate)
 *  @param maxDate          最大時間,可爲空(請使用 NSDate+BRPickerView 分類中和顯示類型格式對應的方法建立 maxDate)
 *  @param isAutoSelect     是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor       自定義主題顏色
 *  @param resultBlock      選擇結果的回調
 *
 */
+ (void)showDatePickerWithTitle:(NSString *)title
                       dateType:(BRDatePickerMode)dateType
                defaultSelValue:(NSString *)defaultSelValue
                        minDate:(NSDate *)minDate
                        maxDate:(NSDate *)maxDate
                   isAutoSelect:(BOOL)isAutoSelect
                     themeColor:(UIColor *)themeColor
                    resultBlock:(BRDateResultBlock)resultBlock;

/**
 *  3.顯示時間選擇器(支持 設置自動選擇、自定義主題顏色、取消選擇的回調)
 *
 *  @param title            標題
 *  @param dateType         日期顯示類型
 *  @param defaultSelValue  默認選中的時間(值爲空/值格式錯誤時,默認就選中如今的時間)
 *  @param minDate          最小時間,可爲空(請使用 NSDate+BRPickerView 分類中和顯示類型格式對應的方法建立 minDate)
 *  @param maxDate          最大時間,可爲空(請使用 NSDate+BRPickerView 分類中和顯示類型格式對應的方法建立 maxDate)
 *  @param isAutoSelect     是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor       自定義主題顏色
 *  @param resultBlock      選擇結果的回調
 *  @param cancelBlock      取消選擇的回調
 *
 */
+ (void)showDatePickerWithTitle:(NSString *)title
                       dateType:(BRDatePickerMode)dateType
                defaultSelValue:(NSString *)defaultSelValue
                        minDate:(NSDate *)minDate
                        maxDate:(NSDate *)maxDate
                   isAutoSelect:(BOOL)isAutoSelect
                     themeColor:(UIColor *)themeColor
                    resultBlock:(BRDateResultBlock)resultBlock
                    cancelBlock:(BRDateCancelBlock)cancelBlock;
複製代碼
  • 使用示例(參考Demo):
NSDate *minDate = [NSDate br_setYear:1990 month:3 day:12];
NSDate *maxDate = [NSDate date];
[BRDatePickerView showDatePickerWithTitle:@"出生日期" dateType:BRDatePickerModeYMD defaultSelValue:weakSelf.birthdayTF.text minDate:minDate maxDate:maxDate isAutoSelect:YES themeColor:nil resultBlock:^(NSString *selectValue) {
    weakSelf.birthdayTF.text = selectValue;
} cancelBlock:^{
    NSLog(@"點擊了背景或取消按鈕");
}];
複製代碼
  • 時間選擇器的顯示類型:
/// 彈出日期類型
typedef NS_ENUM(NSInteger, BRDatePickerMode) {
    // --- 如下4種是系統自帶的樣式 ---
    // UIDatePickerModeTime
    BRDatePickerModeTime,              // HH:mm
    // UIDatePickerModeDate
    BRDatePickerModeDate,              // yyyy-MM-dd
    // UIDatePickerModeDateAndTime
    BRDatePickerModeDateAndTime,       // yyyy-MM-dd HH:mm
    // UIDatePickerModeCountDownTimer
    BRDatePickerModeCountDownTimer,    // HH:mm
    // --- 如下7種是自定義樣式 ---
    // 年月日時分
    BRDatePickerModeYMDHM,      // yyyy-MM-dd HH:mm
    // 月日時分
    BRDatePickerModeMDHM,       // MM-dd HH:mm
    // 年月日
    BRDatePickerModeYMD,        // yyyy-MM-dd
    // 年月
    BRDatePickerModeYM,         // yyyy-MM
    // 年
    BRDatePickerModeY,          // yyyy
    // 月日
    BRDatePickerModeMD,         // MM-dd
    // 時分
    BRDatePickerModeHM          // HH:mm
};
複製代碼
  • 時間選擇器顯示類型的效果圖:

如下4種樣式是使用 UIDatePicker 類 進行封裝的,支持循環滾動

樣式1:UIDatePickerModeTime
樣式2:UIDatePickerModeDate
樣式1:BRDatePickerModeTime 樣式2:BRDatePickerModeDate
樣式3:UIDatePickerModeDateAndTime
樣式4:UIDatePickerModeCountDownTimer
樣式3:BRDatePickerModeDateAndTime 樣式4:BRDatePickerModeCountDownTimer

如下7種樣式是使用 UIPickerView 類 進行封裝的。

樣式5: BRDatePickerModeYMDHM
樣式6: BRDatePickerModeMDHM
樣式5: BRDatePickerModeYMDHM 樣式6: BRDatePickerModeMDHM
樣式7: BRDatePickerModeYMD
樣式8: BRDatePickerModeYM
樣式7: BRDatePickerModeYMD 樣式8: BRDatePickerModeYM
樣式9: BRDatePickerModeY
樣式10: BRDatePickerModeMD
樣式9: BRDatePickerModeY 樣式10: BRDatePickerModeMD
樣式11:BRDatePickerModeHM
樣式11: BRDatePickerModeHM

6.2. 地址選擇器:BRAddressPickerView

​ 查看 BRAddressPickerView.h 頭文件,裏面提供了4個方法,可根據本身的需求選擇其中的一個方法進行使用。

/**
 *  1.顯示地址選擇器
 *
 *  @param defaultSelectedArr       默認選中的值(傳數組,如:@[@"浙江省", @"杭州市", @"西湖區"])
 *  @param resultBlock              選擇後的回調
 *
 */
+ (void)showAddressPickerWithDefaultSelected:(NSArray *)defaultSelectedArr
                                 resultBlock:(BRAddressResultBlock)resultBlock;

/**
 *  2.顯示地址選擇器(支持 設置自動選擇 和 自定義主題顏色)
 *
 *  @param defaultSelectedArr       默認選中的值(傳數組,如:@[@"浙江省", @"杭州市", @"西湖區"])
 *  @param isAutoSelect             是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor               自定義主題顏色
 *  @param resultBlock              選擇後的回調
 *
 */
+ (void)showAddressPickerWithDefaultSelected:(NSArray *)defaultSelectedArr
                                isAutoSelect:(BOOL)isAutoSelect
                                  themeColor:(UIColor *)themeColor
                                 resultBlock:(BRAddressResultBlock)resultBlock;

/**
 *  3.顯示地址選擇器(支持 設置選擇器類型、設置自動選擇、自定義主題顏色、取消選擇的回調)
 *
 *  @param showType                 地址選擇器顯示類型
 *  @param defaultSelectedArr       默認選中的值(傳數組,如:@[@"浙江省", @"杭州市", @"西湖區"])
 *  @param isAutoSelect             是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor               自定義主題顏色
 *  @param resultBlock              選擇後的回調
 *  @param cancelBlock              取消選擇的回調
 *
 */
+ (void)showAddressPickerWithShowType:(BRAddressPickerMode)showType
                      defaultSelected:(NSArray *)defaultSelectedArr
                         isAutoSelect:(BOOL)isAutoSelect
                           themeColor:(UIColor *)themeColor
                          resultBlock:(BRAddressResultBlock)resultBlock
                          cancelBlock:(BRAddressCancelBlock)cancelBlock;

/**
 *  4.顯示地址選擇器(支持 設置選擇器類型、傳入地區數據源、設置自動選擇、自定義主題顏色、取消選擇的回調)
 *
 *  @param showType                 地址選擇器顯示類型
 *  @param dataSource               地區數據源
 *  @param defaultSelectedArr       默認選中的值(傳數組,如:@[@"浙江省", @"杭州市", @"西湖區"])
 *  @param isAutoSelect             是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor               自定義主題顏色
 *  @param resultBlock              選擇後的回調
 *  @param cancelBlock              取消選擇的回調
 *
 */
+ (void)showAddressPickerWithShowType:(BRAddressPickerMode)showType
                           dataSource:(NSArray *)dataSource
                      defaultSelected:(NSArray *)defaultSelectedArr
                         isAutoSelect:(BOOL)isAutoSelect
                           themeColor:(UIColor *)themeColor
                          resultBlock:(BRAddressResultBlock)resultBlock
                          cancelBlock:(BRAddressCancelBlock)cancelBlock;
複製代碼
  • 使用示例(參考Demo):
// 【轉換】:以@" "子字符串爲基準將字符串分離成數組,如:@"浙江省 杭州市 西湖區" ——》@[@"浙江省", @"杭州市", @"西湖區"]
NSArray *defaultSelArr = [weakSelf.addressTF.text componentsSeparatedByString:@" "];
[BRAddressPickerView showAddressPickerWithShowType:BRAddressPickerModeArea defaultSelected:defaultSelArr isAutoSelect:YES themeColor:nil resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {
    weakSelf.addressTF.text = [NSString stringWithFormat:@"%@ %@ %@", province.name, city.name, area.name];
} cancelBlock:^{
    NSLog(@"點擊了背景視圖或取消按鈕");
}];
複製代碼
  • 地址選擇器的3種顯示類型(showType 的3個枚舉值):
省份
城市
樣式1:BRAddressPickerModeProvince 樣式2:BRAddressPickerModeCity
地區
樣式3:BRAddressPickerModeArea

6.3. 自定義字符串選擇器:BRStringPickerView

​ 查看 BRStringPickerView.h 頭文件,裏面提供了3個方法,可根據本身的需求選擇其中的一個方法進行使用。

/**
 *  1.顯示自定義字符串選擇器
 *
 *  @param title            標題
 *  @param dataSource       數據源(1.直接傳數組:NSArray類型;2.能夠傳plist文件名:NSString類型,帶後綴名,plist文件內容要是數組格式)
 *  @param defaultSelValue  默認選中的行(單列傳字符串,多列傳一維數組)
 *  @param resultBlock      選擇後的回調
 *
 */
+ (void)showStringPickerWithTitle:(NSString *)title
                       dataSource:(id)dataSource
                  defaultSelValue:(id)defaultSelValue
                      resultBlock:(BRStringResultBlock)resultBlock;

/**
 *  2.顯示自定義字符串選擇器(支持 設置自動選擇 和 自定義主題顏色)
 *
 *  @param title            標題
 *  @param dataSource       數據源(1.直接傳數組:NSArray類型;2.能夠傳plist文件名:NSString類型,帶後綴名,plist文件內容要是數組格式)
 *  @param defaultSelValue  默認選中的行(單列傳字符串,多列傳一維數組)
 *  @param isAutoSelect     是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor       自定義主題顏色
 *  @param resultBlock      選擇後的回調
 *
 */
+ (void)showStringPickerWithTitle:(NSString *)title
                       dataSource:(id)dataSource
                  defaultSelValue:(id)defaultSelValue
                     isAutoSelect:(BOOL)isAutoSelect
                       themeColor:(UIColor *)themeColor
                      resultBlock:(BRStringResultBlock)resultBlock;

/**
 *  3.顯示自定義字符串選擇器(支持 設置自動選擇、自定義主題顏色、取消選擇的回調)
 *
 *  @param title            標題
 *  @param dataSource       數據源(1.直接傳數組:NSArray類型;2.能夠傳plist文件名:NSString類型,帶後綴名,plist文件內容要是數組格式)
 *  @param defaultSelValue  默認選中的行(單列傳字符串,多列傳一維數組)
 *  @param isAutoSelect     是否自動選擇,即選擇完(滾動完)執行結果回調,傳選擇的結果值
 *  @param themeColor       自定義主題顏色
 *  @param resultBlock      選擇後的回調
 *  @param cancelBlock      取消選擇的回調
 *
 */
+ (void)showStringPickerWithTitle:(NSString *)title
                       dataSource:(id)dataSource
                  defaultSelValue:(id)defaultSelValue
                     isAutoSelect:(BOOL)isAutoSelect
                       themeColor:(UIColor *)themeColor
                      resultBlock:(BRStringResultBlock)resultBlock
                      cancelBlock:(BRStringCancelBlock)cancelBlock;
複製代碼
  • 使用示例(參考Demo):
// 自定義單列字符串
//NSArray *dataSource = @[@"大專如下", @"大專", @"本科", @"碩士", @"博士", @"博士後"];
NSString *dataSource = @"testData1.plist"; // 能夠將數據源(上面的數組)放到plist文件中
[BRStringPickerView showStringPickerWithTitle:@"學歷" dataSource:dataSource defaultSelValue:weakSelf.educationTF.text isAutoSelect:YES themeColor:nil resultBlock:^(id selectValue) {
    weakSelf.educationTF.text = selectValue;
} cancelBlock:^{
    NSLog(@"點擊了背景視圖或取消按鈕");
}];

// 自定義多列字符串
NSArray *dataSource = @[@[@"第1周", @"第2周", @"第3周", @"第4周", @"第5周", @"第6周", @"第7周"], @[@"第1天", @"第2天", @"第3天", @"第4天", @"第5天", @"第6天", @"第7天"]];
//NSString *dataSource = @"testData3.plist"; // 能夠將數據源(上面的數組)放到plist文件中
NSArray *defaultSelArr = [weakSelf.otherTF.text componentsSeparatedByString:@","];
[BRStringPickerView showStringPickerWithTitle:@"自定義多列字符串" dataSource:dataSource defaultSelValue:defaultSelArr isAutoSelect:YES themeColor:RGB_HEX(0xff7998, 1.0f) resultBlock:^(id selectValue) {
    weakSelf.otherTF.text = [NSString stringWithFormat:@"%@,%@", selectValue[0], selectValue[1]];
} cancelBlock:^{
    NSLog(@"點擊了背景視圖或取消按鈕");
}];
複製代碼
  • 字符串選擇器效果圖:
自定義單列字符串
自定義多列字符串
單列字符串選擇器(默認主題色樣式) 雙列字符串選擇器(自定義主題色樣式)
3列效果圖
4列效果圖
3列字符串選擇器(自定義主題色樣式) 4列字符串選擇器(自定義主題色樣式)

7. 許可證

BRPickerView 使用 MIT 許可證,詳情見 LICENSE 文件。

相關文章
相關標籤/搜索