UITextField Keyboard
#pragma mark - UITextFieldDelegate
// 是否允许用户输入文字
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return NO;
}
// 文本框开始编辑的时候调用
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField == _birthdayField) {
// 给生日文本框赋值
[self dateChange:_datePicker];
}else{
// 给城市文本框赋值
[self pickerView:_pickerView didSelectRow:0 inComponent:0];
}
}
自定义键盘
pickerView
UIPickerView *pickerView = [[UIPickerView alloc] init]; pickerView.dataSource = self; pickerView.delegate = self; _cityField.inputView = pickerView;- dataPickerView
#pragma mark -自定义生日键盘
- (void)setUpBirthdayKeyboard
{
// 创建UIDatePicker
// 注意:UIDatePicker有默认的尺寸,可以不用设置frame
UIDatePicker *picker = [[UIDatePicker alloc] init];
_datePicker = picker;
// 设置地区 zh:中国
picker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
// 设置日期的模式
picker.datePickerMode = UIDatePickerModeDate;
// 监听UIDatePicker的滚动
[picker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];
_birthdayField.inputView = picker;
}
给生日文本框赋值
// 当UIDatePicker滚动的时候调用 // 给生日文本框赋值 - (void)dateChange:(UIDatePicker *)datePicker { NSLog(@"%@",datePicker.date); // 日期转换字符串 NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [fmt stringFromDate:datePicker.date]; _birthdayField.text = dateStr; }
- 二联动时会出现动问题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) { // 描述省会
// 获取省会
XMGProvince *p = self.provinces[row];
return p.name;
}else{ // 描述选中的省会的城市
// 获取选中的省会的角标
NSInteger index = [pickerView selectedRowInComponent:0];
// 获取选中省会
XMGProvince *p = self.provinces[_proIndex];
// 当前选中的内蒙古省,只有12个城市,角标0~11,但是右边城市是北京,北京的城市大于12个城市,所以滚动的时候会出现越界。
NSLog(@"province:%@, count:%ld row:%ld",p.name,p.cities.count,row);
return p.cities[row];
}
}
- 登录功能的业务逻辑
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 给文本框添加监听器,及时监听文本框内容的改变
[_accountField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
[_pwdField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];
// 判断下登录按钮能否点击
[self textChange];
}
// 任一一个文本框的内容改变都会调用
- (void)textChange
{
_loginBtn.enabled = _accountField.text.length && _pwdField.text.length;
NSLog(@"%@--%@",_accountField.text,_pwdField.text);
}