如何防止 UIDatePicker 被多次初始化
Posted
技术标签:
【中文标题】如何防止 UIDatePicker 被多次初始化【英文标题】:How to prevent a UIDatePicker from being initialized multiple times 【发布时间】:2017-03-25 17:16:52 【问题描述】:我有一个 UIDatePicker,根据我的代码,我相信每次选择表格视图中的单元格时,都会重新创建日期选择器,或者会发生类似于重新创建日期选择器的事情。我研究了一种叫做单例的东西,但我对它们的工作感到困惑,因为我是 swift 新手。单身人士会阻止这个问题吗?如果是这样,我将如何在我的代码中实现一个。如果不是,我该如何防止此问题发生?这是我用来调用 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"
提前感谢您的帮助!
【问题讨论】:
为什么为每个单元格创建单独的日期选择器会出现问题?您无需在didSelect
方法中创建选择器。它可以是单元格上的属性。
【参考方案1】:
单例是正确的方式(就像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
()
【讨论】:
【参考方案2】:你可以让你的 datePicker
像静态一样:
static let datePicker = UIDatePicker()
那么你就不需要通过单例了。但是如果你想要单例,你可以通过this question 找到在 Swift-3 中实现单例行为的多种方法。
【讨论】:
以上是关于如何防止 UIDatePicker 被多次初始化的主要内容,如果未能解决你的问题,请参考以下文章