Swift 3 Displaying a programmatically created datePicker using a UINavBar Button
15,136
I figured out the solution and am posting the code here:
class HVACViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate, UNUserNotificationCenterDelegate {
@IBOutlet weak var HVACTable: UITableView!
@IBOutlet weak var reminderCell: UITableViewCell!
let dateFormatter = DateFormatter()
let locale = NSLocale.current
var datePicker : UIDatePicker!
let toolBar = UIToolbar()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: self, action: #selector(addTapped))
self.HVACTable.reloadData()
//doDatePicker()
}
func addTapped(){
doDatePicker()
}
func doDatePicker(){
// DatePicker
self.datePicker = UIDatePicker(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 200))
self.datePicker?.backgroundColor = UIColor.white
self.datePicker?.datePickerMode = UIDatePickerMode.dateAndTime
datePicker.center = view.center
view.addSubview(self.datePicker)
// ToolBar
toolBar.barStyle = .default
toolBar.isTranslucent = true
toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
toolBar.sizeToFit()
// Adding Button ToolBar
let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(HVACViewController.doneClick))
let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(HVACViewController.cancelClick))
toolBar.setItems([cancelButton, spaceButton, doneButton], animated: true)
toolBar.isUserInteractionEnabled = true
self.view.addSubview(toolBar)
self.toolBar.isHidden = false
}
func doneClick() {
let dateFormatter1 = DateFormatter()
dateFormatter1.dateStyle = .medium
dateFormatter1.timeStyle = .none
setNotification()
//self.datePicker.resignFirstResponder()
datePicker.isHidden = true
self.toolBar.isHidden = true
}
func cancelClick() {
datePicker.isHidden = true
self.toolBar.isHidden = true
}
Author by
soundChaser
Updated on June 28, 2022Comments
-
soundChaser almost 2 years
I've created a
UIPickerView
programmatically that I currently call from aUITextField
. Instead I would like to call thedatePicker
when the user presses a button created programmatically on the navigation bar. This is what mydatePicker
code currently looks like:func doDatePicker(){ // DatePicker self.datePicker = UIDatePicker(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216)) self.datePicker?.backgroundColor = UIColor.white self.datePicker?.datePickerMode = UIDatePickerMode.dateAndTime HVACText.inputView = self.datePicker // ToolBar let toolBar = UIToolbar() toolBar.barStyle = .default toolBar.isTranslucent = true toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1) toolBar.sizeToFit() // Adding Button ToolBar let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(HVACViewController.doneClick)) let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(HVACViewController.cancelClick)) toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) toolBar.isUserInteractionEnabled = true HVACText.inputAccessoryView = toolBar }
I can use the button to call a generic datePicker, but I want to have the Done and Cancel button available to the user. I also want the datePicker to appear at the bottom of the UITableView. I do not want to segue away from the view.
Any help would be appreciated.
Here's the screen shot as requested. Please note that the interface is a work in progress, the textfield will be going away.