gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:02:14 25 4
gpt4 key购买 nike

我希望我的文本字段“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 这样的委托(delegate),所以这就是为什么必须像 UIButton 一样添加一个 Action 。选择器声明末尾的 : 提供了 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

关于ios - 用 TableViewController 中的日期选择器替换 iOS7 键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com