【问题标题】:Is there a way to hide the UIDatePicker on Swift?有没有办法在 Swift 上隐藏 UIDatePicker?
【发布时间】:2016-01-18 08:07:06
【问题描述】:

我试图隐藏我的日期选择器,直到我的 textField 被选中。我这样做只是为了我拥有的pickerView。但是,我无法找到使用 Swift 来显示然后隐藏文本字段上的 datePicker 的解决方案。

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
}

}

【问题讨论】:

    标签: xcode swift


    【解决方案1】:

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

    此外,您应该在 datePickerChanged 函数中将 datePicker.hidden 设置为 true,前提是您希望日期选择器在日期结束后隐藏被选中。

    【讨论】:

    • 嗨丹尼斯,如果我在日期选择器下方有更多输入字段,有没有办法让它隐藏和/或折叠?现在在 viewDidLoad() 我设置 datePicker.hidden = true 但它只是让空间空着。以下字段未调整以占用该空间。谢谢
    • 嗨,rockhammer,您的问题似乎与您设置 UI 约束的方式有关。您应该在 Auto Layout 中摆弄,直到获得所需的结果。这应该是一个有用的参考:stackoverflow.com/questions/19561269/…
    • 嗨,丹尼斯,感谢您的指点。我拼命地试图避免显示/隐藏 datePicker 的 UITableView 方法。您的参考帮助我弄清楚了如何去做。谢谢
    【解决方案2】:

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

    .

    它看起来像这样:

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

    现在您隐藏 datePicker 的位置将高度设置为 0,当您显示 datePicker 时将高度设置为所需的高度。 您可以使用:

    if dateTimePicker.hidden {
        dateTimePicker.hidden = false
        datePickerHeight.constant = 135
    } else {
        dateTimePicker.hidden = true
        datePickerHeight.constant = 0
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2021-09-02
      • 1970-01-01
      • 2015-12-11
      • 2021-04-28
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-02-19
      相关资源
      最近更新 更多