Swift 如何防止多次初始化UIDatePicker

Swift 如何防止多次初始化UIDatePicker,swift,uidatepicker,didselectrowatindexpath,Swift,Uidatepicker,Didselectrowatindexpath,我有一个UIDatePicker,根据我的代码,我相信每次选择表视图中的单元格时,都会重新创建日期选择器或类似于正在重新创建的日期选择器的内容。我研究过一种叫做“单身汉”的东西,但我对它们的作用感到困惑,因为我对swift还不熟悉。独生子女能防止这个问题吗?如果是这样,我将如何在代码中实现一个。如果没有,我如何防止此问题发生?以下是我用于调用createDatePicker函数和createDatePicker函数的代码: let datePicker = UIDatePicker() fun

我有一个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"

        }

    }

}

提前感谢您的帮助

单例是正确的方法(就像
日期格式化程序
,它们太重了,但经常被重用):

您将在代码中使用一个日期选择器实例

您还可以使用
private init()
,防止调用方在不通过单例的情况下创建实例

class GlobalDatePicker: UIDatePicker {
    static let shared = GlobalDatePicker()
    private init() {}
    // Your methods that modify the picker here...
}
但您也可以在控制器中创建一个
静态变量

static var datePicker: UIDatePicker = {
    let picker = UIDatePicker()
    picker.datePickerMode = .date
    return picker
}()

您只需将
日期选择器设置为静态,如下所示:

static let datePicker = UIDatePicker()

那你就不需要经历单身。但是,如果您想要单例,您可以在Swift-3

中找到多种方法来实现单例行为。为什么为每个单元格创建单独的日期选择器是一个问题?您无需在
didSelect
方法中创建选择器。它可以是单元格上的属性。
static let datePicker = UIDatePicker()