我希望我的textfield"DateText"能够使用这种类型的值打开DatePicker(年 - 月 - 日):
YYYY-MM-DD
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来更改键盘?
Chr*_*ris 33
您可以使用UITextField的inputView属性"替换"键盘:
- (void) initializeTextFieldInputView {
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectZero];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self
action:@selector(dateUpdated:)
forControlEvents:UIControlEventValueChanged];
self.textField.inputView = datePicker;
}
- (void) dateUpdated:(UIDatePicker *)datePicker {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
self.textField.text = [formatter stringFromDate:datePicker.date];
}
Run Code Online (Sandbox Code Playgroud)
UIDatePickers没有像UIPickerViews这样的委托,所以这就是为什么必须添加一个动作就好像它是一个UIButton.将:在选择申报的最后提供的UIDatePicker的方便时,它已被更改为获取日期.如果您不想在方法中发送对象,可以通过引用UITextField的inputView来获取UIDatePicker:
UIDatePicker *datePicker = (UIDatePicker *)self.textField.inputView;
Run Code Online (Sandbox Code Playgroud)
最后,在使用NSDateFormatter设置格式时,最好创建一个方法来返回NSDateFormatter对象,以确保格式一致.至少,在项目中创建一个声明格式字符串的常量/宏.
编辑
正如Pavan在评论主题中所说,如果你想在键盘上方添加一个完成按钮,请使用inputAccessoryView:
UIToolbar *toolbar = [[UIToolbar alloc] init];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneButtonWasPressed:)];
UIBarButtonItem *flexibleSeparator = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
toolbar.items = @[flexibleSeparator, doneButton];
self.textField.inputAccessoryView = toolbar;
Run Code Online (Sandbox Code Playgroud)
编辑2,SWIFT
看起来像这样答案已经过时了.使用Swift 3添加实现:
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.initializeTextFieldInputView()
}
func initializeTextFieldInputView() {
// Add date picker
let datePicker = UIDatePicker()
datePicker.datePickerMode = .date
datePicker.addTarget(self, action: #selector(dateChanged(_:)), for: .valueChanged)
self.textField.inputView = datePicker
// Add toolbar with done button on the right
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 1))
let flexibleSeparator = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneButtonPressed(_:)))
toolbar.items = [flexibleSeparator, doneButton]
self.textField.inputAccessoryView = toolbar
}
func dateChanged(_ datePicker: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
self.textField.text = formatter.string(from: datePicker.date)
}
Run Code Online (Sandbox Code Playgroud)
您还可以通过inputView在UITextField中进行转换来获取UIDatePicker :
let datePicker = self.textField.inputView as? UIDatePicker
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8357 次 |
| 最近记录: |