如何防止多次初始化UIDatePicker

时间:2017-03-25 17:16:52

标签: swift uidatepicker didselectrowatindexpath

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

        }

    }

}

提前感谢您的帮助!

2 个答案:

答案 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 中找到多种单身行为方式。