案例:
DatePicker的鍵盤處理
很多地方都會有點擊textField用DatePicker替換鍵盤位置彈出。
》掌握UITextField如果彈出日期選擇器並在鍵盤添加工具條
(1)設置UITextField的inputView屬性爲日期選擇器即可
(2)熟悉UIToolbar的使用,添加UIBarButtonItem
(3)自定義一個鍵盤工具條,添加在鍵盤上,設置UITextField的inputAccessoryView屬性
(4)通過代理監聽鍵盤工具條的幾個按鈕
》熟悉代碼實現UIToolBar
代碼完成
//代碼創建的toolbar
- (UIToolbar *)codeCreatToolBar{
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 375, 44)];
toolBar.backgroundColor = [UIColor grayColor];
UIBarButtonItem *lastItem = [[UIBarButtonItem alloc] initWithTitle:@"上一個" style:UIBarButtonItemStylePlain target:nil action:nil];
UIBarButtonItem *nextItem = [[UIBarButtonItem alloc] initWithTitle:@"下一個" style:UIBarButtonItemStylePlain target:nil action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(barButtonItem:)];
doneItem.tag = 100;
//固定長度
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
//代碼實現設置寬度
flexItem.width = 30;
//可拉伸的按鈕
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
//添加toolBar的按鈕
toolBar.items = @[lastItem, flexItem, nextItem, flexibleItem, doneItem];
return toolBar;
}
- (void)barButtonItem:(UIBarButtonItem *)sender{
if (sender.tag == 100) {
//獲取日期,顯示在textField上
NSDate *date = self.datePicker.date;
//日期轉字符串
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyyMMdd"];
NSString *dateStr = [formater stringFromDate:date];
self.textField.text = dateStr;
}
}
頭部文件
import "ViewController.h"
#import "CustomToolbar.h"
@interface ViewController ()<CustomToolbarDelegate>
//如果要讓鍵盤的位置替換成pickview,不能用stroyboard
@property (strong, nonatomic) UIDatePicker *datePicker;
@property (strong, nonatomic) UITextField *textField;
@end
- (void)viewDidLoad {
[super viewDidLoad];
//創建pickerView
self.datePicker = [[UIDatePicker alloc] init];
//輸入框
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 80, 200, 40)];
self.textField.backgroundColor = [UIColor grayColor];
[self.view addSubview:self.textField];
//NSLog(@"%@",[NSLocale availableLocaleIdentifiers]);//打印出所有國家的標識
//日期控制的本地化“zh”是中國的日期格式
self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh"];
//日期控制格式
self.datePicker.datePickerMode = UIDatePickerModeDate;
//設置textField鍵盤(將鍵盤的位置替換成datepicker)
self.textField.inputView = self.datePicker;
#pragma mark - 代碼方式在datepicker上面添加一個toolbar
UIToolbar *toolBar = [self codeCreatToolBar];
//設置textField的輔助工具條
self.textField.inputAccessoryView = toolBar;
}
使用xib完成toolbar
1.創建xib
1.1 拖toolbar控件,然後在改空間上添加3個barbuttonItem,默認是緊挨着,如果需要間隔:
1.彈框:Flexible space…
2.固定間距:fixed space….(可以在屬性中設置間距大小)
1.2 自定義繼承Toolbar的視圖
CustomToolbar.h
//協議
@class CustomToolbar;
@protocol CustomToolbarDelegate <NSObject>
@optional
- (void)keyboardToolbar:(CustomToolbar *)toolbar btnDidSelected:(UIBarButtonItem *)barButtonItem;
@end
@interface CustomToolbar : UIToolbar
//代理人
@property (weak, nonatomic) id<CustomToolbarDelegate> delegate;
//創建toolbar
+ (instancetype)toolBar;
@end
CustomToolbar.m
#import "CustomToolbar.h"
@interface CustomToolbar ()
@property (weak, nonatomic) IBOutlet UIBarButtonItem *preBarButton;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *nextBarButton;
- (IBAction)click:(id)sender;
@end
@implementation CustomToolbar
+ (instancetype)toolBar{
return [[[NSBundle mainBundle] loadNibNamed:@"CustomToolbar" owner:self options:nil] lastObject];
}
- (IBAction)click:(id)sender {
//將這個時間傳給控制器,通過代理
if ([self.delegate respondsToSelector:@selector(keyboardToolbar:btnDidSelected:)]) {
[self.delegate keyboardToolbar:self btnDidSelected:sender];
}
}
@end
ViewController.m
#pragma mark - xib方式
CustomToolbar *cusToolBar = [CustomToolbar toolBar];
cusToolBar.delegate = self;
self.textField.inputAccessoryView = cusToolBar;
#pragma mark - CustomToolbarDelegate methods
- (void)keyboardToolbar:(CustomToolbar *)toolbar btnDidSelected:(UIBarButtonItem *)barButtonItem{
if (barButtonItem.tag == 100) {
//獲取日期,顯示在textField上
NSDate *date = self.datePicker.date;
//日期轉字符串
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyyMMdd"];
NSString *dateStr = [formater stringFromDate:date];
self.textField.text = dateStr;
}
}