gpt4 book ai didi

swift - 如何防止 UIDatePicker 被多次初始化

转载 作者:行者123 更新时间:2023-11-28 06:22:17 26 4
gpt4 key购买 nike

我有一个 UIDatePicker,根据我的代码,我相信每次选择表格 View 中的单元格时,都会重新创建日期选择器或发生类似于重新创建日期选择器的事情。我研究过一种叫做单例的东西,但我对它们的工作感到困惑,因为我是 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"

}

}

}

提前感谢您的帮助!

最佳答案

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...
}

但是你也可以在你的 Controller 中创建一个静态变量:

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

关于swift - 如何防止 UIDatePicker 被多次初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43019464/

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