Ios UIDATECIPKER on按钮点击
到目前为止,我只找到绑定到Ios UIDATECIPKER on按钮点击,ios,xcode,swift,uidatepicker,Ios,Xcode,Swift,Uidatepicker,到目前为止,我只找到绑定到UITextField的日期选择器,但我需要一个日期选择器,它在UIButton点击时打开,方式与使用UITextField时相同 可能吗?如果是,怎么做?提前感谢。这里是另一种使用控件的.hidden功能的方法。我使用一个按钮,在触摸时更改标题并隐藏/显示日期选择器 @IBAction func BtnClicked(sender: AnyObject) { var picker : UIDatePicker = UIDatePicker() pick
UITextField
的日期选择器,但我需要一个日期选择器,它在UIButton
点击时打开,方式与使用UITextField
时相同
可能吗?如果是,怎么做?提前感谢。这里是另一种使用控件的.hidden功能的方法。我使用一个按钮,在触摸时更改标题并隐藏/显示日期选择器
@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)
}
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.
}
}
因为我没有足够的声誉来评论,所以我在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)
}
添加子视图:
。你尝试过什么吗?创建一个新的UIView添加日期选择器到其中,并在点击按钮时显示视图。对不起,我不支持Swift。(或者我应该考虑到我得到了77张赞成票)@guise:你可以用同样的方法为textfield创建一个高度为0或隐藏的textfield,同时单击按钮使textfield成为第一响应者,这是最简单的方法。@Chackle,但这对我有帮助。@iAnurag,这是因为你更改了它。。编辑:删除了我最初关于答案仅为Objective-C的评论
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)
}