Xcode 有没有办法在Swift上隐藏UIDatePicker?

Xcode 有没有办法在Swift上隐藏UIDatePicker?,xcode,swift,Xcode,Swift,我试图隐藏我的日期选择器,直到我的文本字段被选中。我这么做只是为了一个皮克维。然而,我还没有找到一个解决方案,使用Swift在文本字段上显示然后隐藏日期选择器 import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate { @IBOutlet weak var TeeTimes: UILabel! @IBOutlet

我试图隐藏我的日期选择器,直到我的文本字段被选中。我这么做只是为了一个皮克维。然而,我还没有找到一个解决方案,使用Swift在文本字段上显示然后隐藏日期选择器

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {

@IBOutlet weak var TeeTimes: UILabel!
@IBOutlet weak var textFieldDate: UITextField!
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var picker: UIPickerView! = UIPickerView()
@IBOutlet weak var textfieldCourse: UITextField!


var pickerData = ["Norman Course", "Riding Golf", "Dmob Course"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    picker.hidden = true;
    self.textfieldCourse.delegate = self
    self.picker.delegate = self
    self.picker.dataSource = self
    textfieldCourse.text = pickerData[0]
    //Inputs the data into the array
    datePicker.hidden = true;
    datePicker.addTarget(self, action: Selector("datePickerChanged:"), forControlEvents: UIControlEvents.ValueChanged)

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

}
func numberOfComponentsInPickerView(pickerView: UIPickerView) ->Int {
    return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) ->Int {
    return pickerData.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return pickerData[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
    textfieldCourse.text = pickerData[row]
    picker.hidden = true
}
func textFieldShouldBeginEditing(textfield: UITextField) ->Bool {
    picker.hidden = false
    return false
}
func datePickerChanged(dataPicker: UIDatePicker) {
    datePicker.hidden = false
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle

    let strDate = dateFormatter.stringFromDate(datePicker.date)
    textFieldDate.text = strDate
}

}我不明白为什么不能使用相同的原则,因为UIDatePickerUIPickerView都是UIView的子类。只需将textFieldDate的委托设置为self,并在textFieldShouldBeginEditing中应用相同的逻辑即可。只有您必须检查正在编辑的文本字段,才能显示正确的选择器


此外,如果希望日期选择器在选定日期后隐藏,则应在datePickerChanged函数中将datePicker.hidden设置为true。

我们完全可以使用自动布局和设置约束来隐藏空间并折叠不同的视图。可以为不同对象设置自动布局,并设置日期选择器的高度。在控制器中拖放高度约束并提供名称:

它看起来像这样:

接下来,在
viewDidLoad()中将约束设置为0,如下所示:
datePickerHeight.constant=0

现在,在隐藏日期选择器的位置将高度设置为0,在显示日期选择器时,将高度设置为所需的高度。 您可以使用:

如果dateTimePicker.hidden{
dateTimePicker.hidden=false
datePickerHeight.constant=135
}否则{
dateTimePicker.hidden=true
datePickerHeight.constant=0
}

嗨,丹尼斯,如果我在日期选择器下面有更多的输入字段,有没有办法让它隐藏和/或折叠?现在在viewDidLoad()中,我将datePicker.hidden设置为true,但它只是将空间留空。下面的字段不会向上调整以占用该空间。感谢rockhammer,您的问题似乎与您设置UI约束的方式有关。你应该在自动布局中摆弄,直到你得到想要的结果。这应该是一个有用的参考:嗨,丹尼斯,谢谢你的指点。我极力避免使用UITableView方法显示/隐藏日期选择器。你的推荐人帮我弄明白了怎么做。谢谢