datepicker更新两个不同的UIButton值

时间:2017-04-11 13:19:52

标签: ios swift mobile uibutton uitextfield

我尝试使用datepicker更新两个按钮。按钮startDate和endDate。我不知道如何使用不同的datepicker更新这些butttons。

也许有处理程序?

用户故事:用户点击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 个答案:

答案 0 :(得分: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. 始终小写实例名称,您使用DatePick作为UIDatePicker的实例名称,而应将其命名为datePicker;对于函数名称。

  2. 对于您的情况,您可以使用两个文本字段而不是按钮。 let datePicker = UIDatePicker() datePicker.addTarget(self, action: #selector(dateChanged), for: .valueChanged) startDateTextField.inputView = datePicler endDateTextField.inputView = datePicker