2015-10-19 99 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 }

相關問題