我有一个UIDatePicker,根据我的代码,我相信每次选择表格视图中的单元格时,都会重新创建日期选择器,或者类似于重新创建的日期选择器。我已经研究了一个叫做单身人士的事情,但我对他们的工作感到困惑,因为我是一个快速的新手。单身人士会阻止这个问题吗?如果是这样,我将如何在我的代码中实现一个。如果不是,我该如何防止此问题发生?这是我用来调用createDatePicker和函数createDatePicker的函数的代码:
let datePicker = UIDatePicker()
func createDatePicker(indexPath: IndexPath, textField: UITextField){
//Tool Bar
let toolbar = UIToolbar()
toolbar.sizeToFit()
//Bar Button Item
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: nil)
toolbar.setItems([doneButton], animated: true)
textField.inputAccessoryView = toolbar
textField.inputView = datePicker
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if(indexPath.row != 0){
let cell = tableView.cellForRow(at: indexPath) as! TableViewCell2
cell.textField.isUserInteractionEnabled = true
cell.textField.delegate = self
if(indexPath.row == 2 || indexPath.row == 3){
createDatePicker(indexPath: indexPath, textField: cell.textField)
}
cell.textField.becomeFirstResponder()
if(indexPath.row == 1){
cell.textField.placeholder = "Event Title"
} else if(indexPath.row == 2){
cell.textField.placeholder = "Start Time"
} else if(indexPath.row == 3){
cell.textField.placeholder = "End Time"
}
}
}
提前感谢您的帮助!
答案 0 :(得分:1)
Singleton是正确的方式(与DateFormatters
一样,也很重,但经常重复使用):
class GlobalDatePicker: UIDatePicker {
static let shared = GlobalDatePicker()
}
您将在代码中使用单个日期选择器实例。
您还可以使用private init()
,以防止调用者在不通过单例的情况下创建实例。
class GlobalDatePicker: UIDatePicker {
static let shared = GlobalDatePicker()
private init() {}
// Your methods that modify the picker here...
}
但您也可以在控制器中创建static variable
:
static var datePicker: UIDatePicker = {
let picker = UIDatePicker()
picker.datePickerMode = .date
return picker
}()
答案 1 :(得分:0)
您可以将datePicker
静态设为:
static let datePicker = UIDatePicker()
然后你不需要经历单身人士。但是如果你想要单身,你可以通过this question,你可以在 Swift-3 中找到多种单身行为方式。