2016-01-20 80 views
3

我正在创建一个具有UITextField的应用程序,当点击/单击时,它将显示将从底部弹出的日期选择器。所述弹出式面板具有完成按钮,其将在点击/点击时将所选日期(默认为今天)应用于文本字段,优选为YYYY-MM-DD格式。Swift:带有完成按钮的文本框上的弹出式DatePicker

我一直在围绕网络进行挖掘,到目前为止,我已经看到了有关文本字段的IBAction的示例,以及如何完成按钮的工作方式(并且大多数没有完成按钮),但我是想知道如果我能回收或基它关闭我的代码为下面的下拉菜单:

let wellheadPressTest : [String] = ["PSIG", "MPAG"] 
var wellboreStatusPickerView = UIPickerView() 

override func viewDidLoad() { 
    let wellboreStatusToolBar = UIToolbar() 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    let doneButtonWellbore = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerWellbore") 

    wellboreStatusToolBar.barStyle = UIBarStyle.Default 
    wellboreStatusToolBar.translucent = true 
    wellboreStatusToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) 
    wellboreStatusToolBar.sizeToFit() 
    wellboreStatusToolBar.setItems([spaceButton,spaceButton,doneButtonWellbore], animated: false) 
    wellboreStatusToolBar.userInteractionEnabled = true 

    wellboreStatusPickerView.delegate = self 
    self.samplingWaterFormOneView.textfieldWellbore.inputView = wellboreStatusPickerView 
    self.samplingWaterFormOneView.textfieldWellbore.inputAccessoryView = wellboreStatusToolBar 
} 


// Various Required PickerView functions 

func donePickerWellbore(){ 
    let row = wellboreStatusPickerView.selectedRowInComponent(0); 
    pickerView(wellboreStatusPickerView, didSelectRow: row, inComponent:0) 
    self.samplingWaterFormOneView.textfieldWellbore.resignFirstResponder() 
} 

这里是我的尝试:

var dateSampledPickerView = UIDatePicker() 

override func viewDidLoad() { 
    let dateSampledPickerToolBar = UIToolbar() 
    let doneButtonDate = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerDate") 
    dateSampledPickerToolBar.barStyle = UIBarStyle.Default 
    dateSampledPickerToolBar.translucent = true 
    dateSampledPickerToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) 
    dateSampledPickerToolBar.sizeToFit() 
    dateSampledPickerToolBar.setItems([spaceButton,spaceButton,doneButtonDate], animated: false) 
    dateSampledPickerToolBar.userInteractionEnabled = true 

    dateSampledPickerView.datePickerMode = UIDatePickerMode.Date 
    dateSampledPickerView.addTarget(self, action: Selector("datePickerValueChanged"), forControlEvents: UIControlEvents.ValueChanged) 

    self.samplingWaterFormOneView.textfieldDateSampled.inputView = dateSampledPickerView 
    self.samplingWaterFormOneView.textfieldDateSampled.inputAccessoryView = dateSampledPickerToolBar 
    self.samplingWaterFormOneView.textfieldDateSampled.delegate = self 
} 

func datePickerValueChanged(sender:UIDatePicker) { 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateStyle = "YYYY-MM-DD" 
    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle 
    self.samplingWaterFormOneView.textfieldDateSampled.text = dateFormatter.stringFromDate(sender.date) 
} 

func donePickerDate(){ 
    self.samplingWaterFormOneView.textfieldDateSampled.resignFirstResponder() 
} 

上面我的代码确实显示弹出菜单带有日期选择器时,我顶部的文本框,一个完成按钮,但文本框没有得到日期。

编辑:也尝试修改datePickerValueChanged,使它没有发件人,也使用dateSampledPickerView为文本字段。没有工作。

在函数中添加注释表明datePickerValueChanged函数未被调用。

我在做什么错?

回答

2

我相信datePickerValueChanged函数没有被调用,因为你没有设置dateSampledPickerView的委托。

所以只需输入

dateSampledPickerView.delegate = self 

*********编辑****************

好了,所以仔细一看后,我相信你已经错误地设置了行动电话。替换该行

dateSampledPickerView.addTarget(self, action: Selector("datePickerValueChanged"), forControlEvents: UIControlEvents.ValueChanged) 

dateSampledPickerView.addTarget(self, action: "datePickerValueChanged", forControlEvents: UIControlEvents.ValueChanged) 

去除选择()

+0

Hmmmm ...那是什么我想也是,但显然,“UIDatePicker的价值没有成员代表”。 –

+0

啊,我现在看到了这个问题。我会更新我的答案 – Devster101

+0

谢谢,这让我有些地方。现在我通过打印知道该函数正在被调用。但是,它不会更新文本字段。我尝试打印'dateFormatter.stringFromDate(dateSampledPickerView.date)',但我什么也没有。 –

4

这里有日期选择器的工具栏中有一个例子:

var date: NSDate? 
var timePicker: UIDatePicker? 

@IBOutlet weak var dateLabel: UILabel! 

func initDatePicker() { 
     if self.timePicker == nil { 
      self.timePicker = UIDatePicker() 
      self.timePicker!.datePickerMode = UIDatePickerMode.Date 
      self.timePicker!.addTarget(self, action: "updateDate", forControlEvents: UIControlEvents.ValueChanged) 
      self.timePicker!.minimumDate = NSDate() 
      self.timePicker!.backgroundColor = UIColor().backgroundColor() 
      self.dateLabel.inputView = self.timePicker 
      self.dateLabel.inputAccessoryView = self.createPickerToolBar() 
     } 
    } 

func updateDate() { 
     let picker: UIDatePicker = self.dateLabel.inputView as! UIDatePicker 
     self.dateLabel.text = picker.date.stringFromDate(kDateFormatSlash) 
     self.date = picker.date 
     self.delegate?.didIntroduceText(self.actionTextView.text.characters.count != 0 && self.searchableTableView?.getText().characters.count != 0 && self.dateLabel.text!.characters.count != 0) 
    } 

    func createPickerToolBar() -> UIToolbar { 
     let toolbar = UIToolbar() 
     let doneButton = UIBarButtonItem(title: "DONE", style: UIBarButtonItemStyle.Done, target: self, action: "doneAction") 
     doneButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: kOpenSansRegular, size: kHeaderFontSize)!, NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal) 
     doneButton.accessibilityLabel = "DoneToolbar" 
     let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
     toolbar.translucent = false 
     toolbar.sizeToFit() 
     toolbar.setItems([spaceButton, doneButton], animated: false) 
     toolbar.userInteractionEnabled = true 
     return toolbar 
    } 

    func doneAction() { 
     self.updateDate() 
     self.dateLabel.resignFirstResponder() 
     self.timePicker?.removeFromSuperview() 
    } 
+0

我失踪东西在这里,我有两个文本字段,每个使用日期选择器,和我有重复每个功能将它们分开。这似乎是错误的,即使它的工作原理。我怎么能告诉doneAction在一个更新的右场函数,而不是重复? – jessi

+0

您可以添加标签的日期选择器和工具栏 – nmortada

相关问题