UITextField有一個inputView的屬性,可以通過給inputView賦值的方法給UITextField定制鍵盤。如下圖所示,我們可以通過給UITextField自定義鍵盤,使它的輸入控件為時間選擇器:

123.png
實(shí)現(xiàn)過程如下:
首先,自定義一個繼承自UITextField的類:
@interface BirthdayField : UITextField
@end
然后,我們初始化它的時候,給它指定一個inputView:
-(void)initTextValue
{
[self valueChange:self.datePicker];
}
-(instancetype)initWithFrame:(CGRect)frame
{
if(self == [super initWithFrame:frame])
{
[self initView];
}
return self;
}
-(void)awakeFromNib
{
[super awakeFromNib];
[self initView];
}
-(void)initView
{
UIDatePicker *date = [[UIDatePicker alloc]init];
//日期格式
date.datePickerMode = UIDatePickerModeDate;
//中國
date.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
[date addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventValueChanged];
self.datePicker = date;
self.inputView = date;
}
-(void)valueChange:(UIDatePicker *)sender
{
NSLog(@"%@",sender.date);
NSDateFormatter *format = [[NSDateFormatter alloc]init];
format.dateFormat = @"yyyy-MM-dd";
self.text = [format stringFromDate:sender.date];
}
其次,調(diào)用的時候,我們可能不想讓自定義的TextField中有用戶通過其他鍵盤輸入的內(nèi)容,需要在它的代理方法中返回NO:
//是否允許用戶自己輸入
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSLog(@"%s",__func__);
return NO;
}
最后,我們可能需要在TextField剛獲得焦點(diǎn)的時候給它一個默認(rèn)值。這個時候,我們就需要寫一個設(shè)置默認(rèn)值的方法,并在代理方法-(void)textFieldDidBeginEditing: 中調(diào)用:
@interface BirthdayField : UITextField
-(void)initTextValue;
@end
-(void)initTextValue
{
[self valueChange:self.datePicker];
}
-(void)textFieldDidBeginEditing:(id )textField
{
if([textField respondsToSelector:@selector(initTextValue)])
{
[textField initTextValue];
}
}
附上demo地址:demo