2015-10-19 109 views
1

我想隐藏我的datepicker,直到我的textField被选中。我只是为我的pickerView做了这个。但是,我一直无法找到一个解决方案,使用Swift显示然后将datePicker隐藏在textField上。有没有办法在Swift上隐藏UIDatePicker?

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 
} 

}

回答

1

我不明白为什么你就不能使用相同的原理,看到两个的UIDatePickerUIPickerView是UIView的的子类。只需将textFieldDate的代表设置为self并在textFieldShouldBeginEditing中应用相同的逻辑。只有您必须检查正在编辑哪个文本字段才能显示正确的选取器。

另外,你应该设置datePicker.hidden真正datePickerChanged功能假设你想要的日期已被选定后,隐藏日期选择器。

+0

嗨丹尼斯,如果我有更多的日期选择器下面的输入字段,有没有办法让它隐藏和/或折叠?现在在viewDidLoad()我设置了datePicker.hidden = true,但它只是留空。下面的字段没有调整到占用这个空间。谢谢 – rockhammer

+1

嗨rockhammer,你的问题似乎与你设置你的UI约束的方式。您应该在Auto Layout中摆弄,直到获得所需的结果。这应该是一个有用的参考:http://stackoverflow.com/questions/19561269/autolayout-with-hidden-uiviews –

+0

嗨丹尼斯,感谢指针。我拼命地试图避免显示/隐藏datePicker的UITableView方法。你的参考帮助我弄清楚如何去做。谢谢 – rockhammer

0

我们绝对可以使用自动布局并设置约束来隐藏空间并折叠不同的视图。您可以为不同的对象设置自动布局,并设置日期选择器的高度。将高度约束拖放到控制器中,并提供名称drag and drop constraint。它会是这个样子link

下一页设置限制为0,在您的viewDidLoad中()为datePickerHeight.constant = 0

现在你在哪里隐藏您的日期选择器设置高度为0,当你显示日期选择器设置高度作为所需的高度。 你可以起诉if dateTimePicker.hidden { dateTimePicker.hidden = false datePickerHeight.constant = 135 } else { dateTimePicker.hidden = true datePickerHeight.constant = 0 }

相关问题