用TableViewController中的日期选择器替换iOS7键盘

我希望我的textfield“DateText”能够使用这种类型的值打开DatePicker(年 – 月 – 日):
YYYY-MM-DD

有没有简单的方法来更改键盘

解决方法

您可以使用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];
}

UIDatePickers没有像UIPickerViews这样的委托,所以这就是必须添加一个动作就好像它是一个UIButton的原因. :在选择器声明的末尾提供UIDatePicker,以方便获取更改日期.如果您不想在方法中发送对象,可以通过引用UITextField的inputView来获取UIDatePicker:

UIDatePicker *datePicker = (UIDatePicker *)self.textField.inputView;

最后,在使用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;

编辑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)
}

您还可以通过在UITextField中转换inputView来获取UIDatePicker:

let datePicker = self.textField.inputView as? UIDatePicker

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...