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);
}

results matching ""

    No results matching ""