【发布时间】:2021-09-14 04:18:39
【问题描述】:
在我的应用程序中,我有一个按钮,单击该按钮应显示带有工具栏的时间选择器。我看到的大多数示例都将工具栏添加为文本字段上的 inputAccessoryView,但在我的情况下,我没有文本字段。
因此,我创建了一个自定义视图,其中包含日期时间选择器和工具栏,我将该视图作为子视图添加到我的控制器视图中,但我在应用程序上看不到自定义视图。
以下是点击按钮的控制器代码:
func buttonClicked(date: Date) {
let timePicker = EditTimeHelper.createTimePickerAndToolbar(displayDate: date)
self.view.addSubview(timePicker)
}
单独的 EditTimeHelper 类中的自定义视图代码:
static func createTimePickerAndToolbar(displayDate: Date) -> UIView {
let pickerView = UIView(frame: CGRect(x: 0, y: UIScreen.main.bounds.height - 300, width: UIScreen.main.bounds.width, height: 300))
let timePicker = createTimePicker(displayDate: displayDate)
pickerView.addSubview(timePicker)
let toolbar = createUIToolBar()
pickerView.addSubview(toolbar)
return pickerView
}
static func createTimePicker(displayDate: Date) -> UIDatePicker {
let timePicker:UIDatePicker = UIDatePicker()
timePicker.datePickerMode = UIDatePicker.Mode.time
timePicker.date = displayDate
timePicker.minuteInterval = 15
if #available(iOS 13.4, *) {
timePicker.preferredDatePickerStyle = .wheels
} else {
// Fallback on earlier versions where time picker is wheels style by default.
}
timePicker.addTarget(self, action: #selector(timeChanged(_:)), for: UIControl.Event.valueChanged)
timePicker.backgroundColor = .white
timePicker.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 200, width: UIScreen.main.bounds.width, height: 200)
return timePicker
}
private static func createUIToolBar() -> UIToolbar {
let pickerToolbar = UIToolbar()
pickerToolbar.autoresizingMask = .flexibleHeight
//customize the toolbar
pickerToolbar.barStyle = .default
pickerToolbar.barTintColor = UIColor.black
pickerToolbar.backgroundColor = UIColor.white
pickerToolbar.isTranslucent = false
pickerToolbar.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 300, width: UIScreen.main.bounds.width, height: 100)
// add buttons
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(cancelBtnClicked(_:)))
cancelButton.tintColor = UIColor.white
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneBtnClicked(_:)))
doneButton.tintColor = UIColor.white
//add the items to the toolbar
pickerToolbar.items = [cancelButton, flexSpace, doneButton]
return pickerToolbar
}
@objc func timeChanged(_ sender: UIDatePicker) {
}
@objc func cancelBtnClicked(_ button: UIBarButtonItem?) {
}
@objc func doneBtnClicked(_ button: UIBarButtonItem?) {
}
知道我做错了什么并且没有看到自定义视图吗?
如果我调用EditTimeHelper.createTimePicker(displatDate: date),我会看到时间选择器,但我想在它上面添加工具栏。
当我调试此代码时,我确实将时间选择器和工具栏视为自定义视图的子视图,但我只是在应用程序上看不到它们。
【问题讨论】:
-
您创建选择器的方法被声明为静态的。没有实例
self可分配给您的日期选择器。
标签: ios swift uidatepicker