2017-04-11 48 views
0

我試圖用datepicker更新兩個按鈕。按鈕startDate和endDate。我不怎麼能用不同的日期選擇器更新這些按鈕。datepicker在兩個不同的更新值UIButton

也許與處理程序?

用戶故事:用戶點擊startDat datepicker顯示時,用戶選擇任何日期或時間,然後點擊endDate和相同的動作。

編輯:

class ViewController: UIViewController { 

    @IBOutlet weak var dateTextField: UITextField! 
    @IBOutlet weak var dateTextLabel: UILabel! 
    var whoTriggeredPickerView: UIButton? 
    @IBOutlet weak var startDateTextButton : UIButton! 
    @IBOutlet weak var endDateTextButton : UIButton! 

    @IBOutlet weak var datePick : UIDatePicker! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func donePressed(_ sender: UIBarButtonItem) { 

     dateTextField.resignFirstResponder() 
     dateTextLabel.resignFirstResponder() 
     startDateTextButton.resignFirstResponder() 
     endDateTextButton.resignFirstResponder()  
    } 

    func donePressedButton(_ sender :UIButton){ 
     startDateTextButton.resignFirstResponder() 
     endDateTextButton.resignFirstResponder() 
    } 

    func tappedToolBarBtn(_ sender: UIBarButtonItem) { 

     let dateformatter = DateFormatter() 

     startDateTextButton.setTitle(dateformatter.string(from: Date()), for: .normal) 
     endDateTextButton.setTitle(dateformatter.string(from: Date()), for: .normal) 

     startDateTextButton.resignFirstResponder() 
     endDateTextButton.resignFirstResponder() 
    } 

    func closeDatePicker(){ 
     self.view.endEditing(true) 
    } 


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     closeDatePicker() 
    } 

    @IBAction func BtnClicked(sender: UIButton) { 
     let datePickerView: UIDatePicker = UIDatePicker() 

     datePickerView.datePickerMode = UIDatePickerMode.date 

     //sender.inputView = datePickerView 
     self.view.addSubview(datePickerView) 
     datePickerView.addTarget(self, action: #selector(ViewController.datePickerValueChanged), for: UIControlEvents.valueChanged) 

     self.whoTriggeredPickerView = sender 
    } 

    func datePickerValueChanged(_ sender: UIDatePicker) { 

     let dateFormatter = DateFormatter() 

     dateFormatter.dateStyle = DateFormatter.Style.medium 

     dateFormatter.timeStyle = DateFormatter.Style.none 
     //dateTextField.text = dateFormatter.string(from: sender.date) 

     if self.whoTriggeredPickerView == startDateTextButton { 
      // set startDateBtn title 
      startDateTextButton.setTitle(dateFormatter.string(from: Date()), for: .normal) 
     }else if self.whoTriggeredPickerView == endDateTextButton { 
      // set endDateBtn title 
      endDateTextButton.setTitle(dateFormatter.string(from: Date()), for: .normal) 
     } 

    } 
} 

回答

1

對於你的問題: 您可以創建一個TMP變量記錄選擇器是由哪個按鈕觸發。然後,您可以決定要設置哪個按鈕的標題。

//In your view controller: 
var whoTriggeredPickerView: UIButton? 

//In your BtnClicked function: 
self.whoTriggeredPickerView = sender 

//Then in datePickerValueChanged function: 
if self.whoTriggeredPickerView == StartDateButton { 
    // set startDateBtn title 
}else if self.whoTriggerPickerView == endDateButton { 
    // set endDateBtn title 
} 

幾點建議:

  1. 總是小寫的實例名稱,您使用的DatePickUIDatePicker實例名稱,相反,你應該將其命名爲datePicker;對於函數名稱也是如此。

  2. 對於您的情況,您可以使用兩個文本框而不是按鈕。 let datePicker = UIDatePicker() datePicker.addTarget(self, action: #selector(dateChanged), for: .valueChanged) startDateTextField.inputView = datePicler endDateTextField.inputView = datePicker

+0

第二個建議是不行的,日期選擇器更新所有的領域,我想目前的日期選擇器更新領域。我怎樣才能做到這一點與tmp變量? – kakame91

+0

@ kakame91答案已更新,請注意您必須將您的'BtnClicked'參數類類型更改爲UIButton而不是AnyObject;不過,我建議你使用textfield而不是UIButton。 – johnny

+0

不起作用我不能離開當前的日期選擇器,並且日期在默認日期:(在編輯的文章上方) – kakame91