uipickerview - Swift 2.1 - How do I change the uidatepicker so it only allows for time instead of date? -


the following code below allows user select date, want change 'time' via am/pm, user can select set time instead being date. want separate , not combined, appreciate if me here thanks.

import foundation import uikit import quartzcore  class datepickerdialog: uiview {      typealias datepickercallback = (date: nsdate) -> void      /* consts */     private let kdatepickerdialogdefaultbuttonheight:       cgfloat = 50     private let kdatepickerdialogdefaultbuttonspacerheight: cgfloat = 1     private let kdatepickerdialogcornerradius:              cgfloat = 7     private let kdatepickerdialogdonebuttontag:             int     = 1      /* views */     private var dialogview:   uiview!     private var titlelabel:   uilabel!     private var datepicker:   uidatepicker!     private var cancelbutton: uibutton!     private var donebutton:   uibutton!      /* vars */     private var defaultdate:    nsdate?     private var datepickermode: uidatepickermode?     private var callback:       datepickercallback?       /* overrides */     init() {         super.init(frame: cgrectmake(0, 0, uiscreen.mainscreen().bounds.size.width, uiscreen.mainscreen().bounds.size.height))          setupview()     }      required init(coder adecoder: nscoder) {         fatalerror("init(coder:) has not been implemented")     }      deinit {         nsnotificationcenter.defaultcenter().removeobserver(self)     }      func setupview() {         self.dialogview = createcontainerview()          self.dialogview!.layer.shouldrasterize = true         self.dialogview!.layer.rasterizationscale = uiscreen.mainscreen().scale          self.layer.shouldrasterize = true         self.layer.rasterizationscale = uiscreen.mainscreen().scale          self.dialogview!.layer.opacity = 0.5         self.dialogview!.layer.transform = catransform3dmakescale(1.3, 1.3, 1)          self.backgroundcolor = uicolor(red: 0, green: 0, blue: 0, alpha: 0)          self.addsubview(self.dialogview!)          uiapplication.sharedapplication().windows.first!.addsubview(self)     }      /* handle device orientation changes */     func deviceorientationdidchange(notification: nsnotification) {         /* todo */     }      /* create dialog view, , animate opening dialog */     func show(title: string, datepickermode: uidatepickermode = .date, callback: datepickercallback) {         show(title, donebuttontitle: "done", cancelbuttontitle: "cancel", datepickermode: datepickermode, callback: callback)     }      func show(title: string, donebuttontitle: string, cancelbuttontitle: string, defaultdate: nsdate = nsdate(), datepickermode: uidatepickermode = .date, callback: datepickercallback) {         self.titlelabel.text = title         self.donebutton.settitle(donebuttontitle, forstate: .normal)         self.cancelbutton.settitle(cancelbuttontitle, forstate: .normal)         self.datepickermode = datepickermode         self.callback = callback         self.defaultdate = defaultdate         self.datepicker.datepickermode = self.datepickermode ?? .date         self.datepicker.date = self.defaultdate ?? nsdate()          /* anim */         uiview.animatewithduration(             0.2,             delay: 0,             options: uiviewanimationoptions.curveeaseinout,             animations: { () -> void in                 self.backgroundcolor = uicolor(red: 0, green: 0, blue: 0, alpha: 0.4)                 self.dialogview!.layer.opacity = 1                 self.dialogview!.layer.transform = catransform3dmakescale(1, 1, 1)             },             completion: nil         )     }      /* dialog close animation cleaning , removing view parent */     private func close() {         let currenttransform = self.dialogview.layer.transform          let startrotation = (self.valueforkeypath("layer.transform.rotation.z") as? nsnumber) as? double ?? 0.0         let rotation = catransform3dmakerotation((cgfloat)(-startrotation + m_pi * 270 / 180), 0, 0, 0)          self.dialogview.layer.transform = catransform3dconcat(rotation, catransform3dmakescale(1, 1, 1))         self.dialogview.layer.opacity = 1          uiview.animatewithduration(             0.2,             delay: 0,             options: uiviewanimationoptions.transitionnone,             animations: { () -> void in                 self.backgroundcolor = uicolor(red: 0, green: 0, blue: 0, alpha: 0)                 self.dialogview.layer.transform = catransform3dconcat(currenttransform, catransform3dmakescale(0.6, 0.6, 1))                 self.dialogview.layer.opacity = 0             }) { (finished: bool) -> void in                 v in self.subviews {                     v.removefromsuperview()                 }                  self.removefromsuperview()         }     }      /* creates container view here: create dialog, add custom content , buttons */     private func createcontainerview() -> uiview {         let screensize = countscreensize()         let dialogsize = cgsizemake(             300,             230                 + kdatepickerdialogdefaultbuttonheight                 + kdatepickerdialogdefaultbuttonspacerheight)          // black background         self.frame = cgrectmake(0, 0, screensize.width, screensize.height)          // dialog's container; attach custom content , buttons 1         let dialogcontainer = uiview(frame: cgrectmake((screensize.width - dialogsize.width) / 2, (screensize.height - dialogsize.height) / 2, dialogsize.width, dialogsize.height))          // first, style dialog match ios8 uialertview >>>         let gradient: cagradientlayer = cagradientlayer(layer: self.layer)         gradient.frame = dialogcontainer.bounds         gradient.colors = [uicolor(red: 218/255, green: 218/255, blue: 218/255, alpha: 1).cgcolor,             uicolor(red: 233/255, green: 233/255, blue: 233/255, alpha: 1).cgcolor,             uicolor(red: 218/255, green: 218/255, blue: 218/255, alpha: 1).cgcolor]          let cornerradius = kdatepickerdialogcornerradius         gradient.cornerradius = cornerradius         dialogcontainer.layer.insertsublayer(gradient, atindex: 0)          dialogcontainer.layer.cornerradius = cornerradius         dialogcontainer.layer.bordercolor = uicolor(red: 198/255, green: 198/255, blue: 198/255, alpha: 1).cgcolor         dialogcontainer.layer.borderwidth = 1         dialogcontainer.layer.shadowradius = cornerradius + 5         dialogcontainer.layer.shadowopacity = 0.1         dialogcontainer.layer.shadowoffset = cgsizemake(0 - (cornerradius + 5) / 2, 0 - (cornerradius + 5) / 2)         dialogcontainer.layer.shadowcolor = uicolor.blackcolor().cgcolor         dialogcontainer.layer.shadowpath = uibezierpath(roundedrect: dialogcontainer.bounds, cornerradius: dialogcontainer.layer.cornerradius).cgpath          // there line above button         let lineview = uiview(frame: cgrectmake(0, dialogcontainer.bounds.size.height - kdatepickerdialogdefaultbuttonheight - kdatepickerdialogdefaultbuttonspacerheight, dialogcontainer.bounds.size.width, kdatepickerdialogdefaultbuttonspacerheight))         lineview.backgroundcolor = uicolor(red: 198/255, green: 198/255, blue: 198/255, alpha: 1)         dialogcontainer.addsubview(lineview)         // ˆˆˆ          //title         self.titlelabel = uilabel(frame: cgrectmake(10, 10, 280, 30))         self.titlelabel.textalignment = nstextalignment.center         self.titlelabel.font = uifont.boldsystemfontofsize(17)         dialogcontainer.addsubview(self.titlelabel)          self.datepicker = uidatepicker(frame: cgrectmake(0, 30, 0, 0))         self.datepicker.autoresizingmask = uiviewautoresizing.flexiblerightmargin         self.datepicker.frame.size.width = 300         dialogcontainer.addsubview(self.datepicker)          // add buttons         addbuttonstoview(dialogcontainer)          return dialogcontainer     }      /* add buttons container */     private func addbuttonstoview(container: uiview) {         let buttonwidth = container.bounds.size.width / 2          self.cancelbutton = uibutton(type: uibuttontype.custom) uibutton         self.cancelbutton.frame = cgrectmake(             0,             container.bounds.size.height - kdatepickerdialogdefaultbuttonheight,             buttonwidth,             kdatepickerdialogdefaultbuttonheight         )         self.cancelbutton.settitlecolor(uicolor(red: 0, green: 0.5, blue: 1, alpha: 1), forstate: uicontrolstate.normal)         self.cancelbutton.settitlecolor(uicolor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5), forstate: uicontrolstate.highlighted)         self.cancelbutton.titlelabel!.font = uifont.boldsystemfontofsize(14)         self.cancelbutton.layer.cornerradius = kdatepickerdialogcornerradius         container.addsubview(self.cancelbutton)          self.donebutton = uibutton(type: uibuttontype.custom) uibutton         self.donebutton.frame = cgrectmake(             buttonwidth,             container.bounds.size.height - kdatepickerdialogdefaultbuttonheight,             buttonwidth,             kdatepickerdialogdefaultbuttonheight         )         self.donebutton.tag = kdatepickerdialogdonebuttontag         self.donebutton.settitlecolor(uicolor(red: 0, green: 0.5, blue: 1, alpha: 1), forstate: uicontrolstate.normal)         self.donebutton.settitlecolor(uicolor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5), forstate: uicontrolstate.highlighted)         self.donebutton.titlelabel!.font = uifont.boldsystemfontofsize(14)         self.donebutton.layer.cornerradius = kdatepickerdialogcornerradius         self.donebutton.addtarget(self, action: "buttontapped:", forcontrolevents: uicontrolevents.touchupinside)         container.addsubview(self.donebutton)     }      func buttontapped(sender: uibutton!) {         if sender.tag == kdatepickerdialogdonebuttontag {             self.callback?(date: self.datepicker.date)         }          close()     }      /* helper function: count , return screen's size */     func countscreensize() -> cgsize {         let screenwidth = uiscreen.mainscreen().bounds.size.width         let screenheight = uiscreen.mainscreen().bounds.size.height          return cgsizemake(screenwidth, screenheight)     }  } 

here action in separate view controller.

@ibaction func datepickertapped(sender: anyobject) {         datepickerdialog().show("select date of incident", donebuttontitle: "done", cancelbuttontitle: "cancel", datepickermode: .date) {             (date) -> void in             let dateformatter = nsdateformatter()             dateformatter.dateformat = "dd-mm-yyyy" //format style. can change according yours             let datestring = dateformatter.stringfromdate(date)             self.textfield3.text = datestring         }      } 

if "separately," mean prompting date , prompting time, can call show method again , pass in appropriate uidatepickermode (.time in case) , format time according requirements.

like so:

datepickerdialog().show("select time of incident", donebuttontitle: "done", cancelbuttontitle: "cancel", datepickermode: .time) {     //format time accordingly     //self.textfield3.text = timestring }  

Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -