2016-01-20 82 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

相關問題