【问题标题】:UIDatePicker on button tap按钮点击时的UIDatePicker
【发布时间】:2015-03-20 11:39:15
【问题描述】:

到目前为止,我只找到绑定到UITextField 的日期选择器,但我需要一个日期选择器,它在UIButton 上打开,方法与UITextField 相同。

有可能吗?如果是这样,怎么办?提前致谢。

【问题讨论】:

  • addSubview:。你试过什么吗?
  • 创建一个新的 UIView 添加 datePicker 并在按钮单击时显示视图。
  • 抱歉,我不会为 Swift 使用 do it again。 (或者也许我应该考虑到我得到了 77 票)
  • @guise:您可以对文本字段使用相同的方法,即创建一个高度为 0 或隐藏的文本字段,在单击按钮时将文本字段设为 firstResponder,这是最简单的方法。

标签: ios xcode swift uidatepicker


【解决方案1】:
@IBAction func BtnClicked(sender: AnyObject) {
    var picker : UIDatePicker = UIDatePicker()
    picker.datePickerMode = UIDatePickerMode.Date
    picker.addTarget(self, action: "dueDateChanged:", forControlEvents: UIControlEvents.ValueChanged)
    var pickerSize : CGSize = picker.sizeThatFits(CGSizeZero)
    picker.frame = CGRectMake(0.0, 250, pickerSize.width, 460)
    // you probably don't want to set background color as black
    // picker.backgroundColor = UIColor.blackColor()
    self.view.addSubview(picker)
}

func dueDateChanged(sender:UIDatePicker){
    var dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle
    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
    self.myLabel.text = dateFormatter.stringFromDate(dueDatePickerView.date)
}

【讨论】:

  • @Chackle 但这对我有帮助,所以。
  • @iAnurag 那是因为你改变了它.. 编辑:删除了我关于答案仅在 Objective-C 中的初步评论
【解决方案2】:

因为我没有足够的声誉来发表评论,所以我在 Swift 4 中发布了与 @iAnurag 相同的答案

 @IBAction func UpdateDOBClick(_ sender: UIButton) {
    let picker : UIDatePicker = UIDatePicker()
    picker.datePickerMode = UIDatePickerMode.date
    picker.addTarget(self, action: #selector(dueDateChanged(sender:)), for: UIControlEvents.valueChanged)
    let pickerSize : CGSize = picker.sizeThatFits(CGSize.zero)
    picker.frame = CGRect(x:0.0, y:250, width:pickerSize.width, height:460)
    // you probably don't want to set background color as black
    // picker.backgroundColor = UIColor.blackColor()
    self.view.addSubview(picker)
}
@objc func dueDateChanged(sender:UIDatePicker){
    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .short
    dateFormatter.timeStyle = .none
dobButton.setTitle(dateFormatter.string(from: sender.date), for: .normal)
}

【讨论】:

  • 它没有显示日期选择器,而是显示一个带有日期的标签,并且点击它会打开选​​择器。但是,我需要直接在按钮点击时打开选择器
【解决方案3】:

这是使用控件的 .hidden 功能的另一种方法。我使用一个按钮,在触摸时更改标题并隐藏/显示日期选择器。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var showDate: UILabel!
    @IBOutlet weak var myButtonx: UIButton!
    @IBAction func myButton(sender: UIButton) {
        if myButtonx.titleLabel?.text != "Done" {
            // save the date for your need
            showDate.text = "\(myDatePicker.date)"
            myDatePicker.hidden = false
            myButtonx.setTitle("Done",forState: UIControlState.Normal)
        } else {
            myDatePicker.hidden = true
            myButtonx.setTitle("Pick Date",forState: UIControlState.Normal)
        }
    }
    @IBOutlet weak var myDatePicker: UIDatePicker!
    override func viewDidLoad() {
        super.viewDidLoad()
        myDatePicker.hidden = true

        myButtonx.setTitle("Pick Date",forState: UIControlState.Normal)

        // Do any additional setup after loading the view, typically from a nib.
    }

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


}

【讨论】:

    【解决方案4】:
    private var datePicker: UIDatePicker?
    
    @IBAction func dateFilterAction(_ sender: UIButton) {
        if self.view.subviews.contains(where: { $0 is UIDatePicker }) {
            self.datePicker?.removeFromSuperview()
            dateFilter.setTitle("Datum", for: .normal)
        } else {
            datePicker = nil
            setupDatePicker()
        }
    }
    
    private func setupDatePicker() {
        let picker = datePicker ?? UIDatePicker()
        picker.datePickerMode = .date
        if #available(iOS 13.4, *) {
            picker.preferredDatePickerStyle = .wheels
        }
        picker.addTarget(self, action: #selector(dueDateChanged(sender:)), for: .valueChanged)
        let size = self.view.frame.size
        picker.frame = CGRect(x: 0.0, y: size.height - 200, width: size.width, height: 200)
        picker.backgroundColor = UIColor.white
        self.datePicker = picker
        self.view.addSubview(self.datePicker!)
    }
    
    @objc func dueDateChanged(sender:UIDatePicker){
        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .short
        dateFormatter.timeStyle = .none
        
        print("action")
        
        dateFilter.setTitle(dateFormatter.string(from: sender.date), for: .normal)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2012-08-19
      相关资源
      最近更新 更多