为什么我的 datePicker 没有显示?

Why isn't my datePicker showing?

我有一个基本设置,当文本字段出现时 datePicker 就会出现。我在 datePicker 应该出现的 table 中有多个元素。我知道代码有效,因为我创建了一个完美运行的视图。我也是 swift 的新手。我相信它可能会出现在我的 table 视图后面。我怎么会 test/fix 那? 这是我的 datePicker 的编码位置:

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate {

@IBOutlet weak var tableView: UITableView!
@IBOutlet var coursePicker: UIPickerView!
@IBOutlet var courseTextfield: UITextField!
@IBOutlet var playerPicker: UIPickerView!
@IBOutlet var playerTextfield: UITextField!
@IBOutlet var timePicker: UIPickerView!
@IBOutlet var timeTextfield: UITextField!
@IBOutlet weak var dateTextfield: UITextField!

@IBAction func unwindToVC(segue: UIStoryboardSegue) {
    if(segue.sourceViewController.isKindOfClass(ConViewController)) {
        let viewCon:ConViewController = (segue.sourceViewController as? ConViewController)!
        lblOneData[tblIndex] = viewCon.pOneTextfield.text!
        lblTwoData[tblIndex] = viewCon.pTwoTextfield.text!
        lblThreeData[tblIndex] = viewCon.pThreeTextfield.text!
        lblFourData[tblIndex] = viewCon.pFourTextfield.text!
        tableView.reloadData()
    }
}

var tableData: [String] = ["8:00 am", "8:10 am", "8:20 am", "8:30 am", "8:40 am", "8:50 am", "9:00 am", "9:10 am", "9:20 am", "9:30 am", "9:40 am", "9:50 am", "10:00 am", "10:10 am", "10:20 am", "10:30 am", "10:40 am", "10:50 am", "11:00 am", "11:10 am", "11:20 am", "11:30 am", "11:40 am", "11:50 am", "12:00 pm", "12:10 pm", "12:20 pm", "12:30 pm", "12:40 pm", "12:50 pm", "1:00 pm", "1:10 pm", "1:20 pm", "1:30 pm", "1:40 pm", "1:50 pm", "2:00 pm", "2:10 pm", "2:20 pm", "2:30 pm", "2:40 pm", "2:50 pm", "3:00 pm", "3:10 pm", "3:20 pm", "3:30 pm", "3:40 pm", "3:50 pm", "4:00 pm", "4:10 pm", "4:20 pm", "4:30 pm", "4:40 pm", "4:50 pm", "5:00 pm"]
var courseData = ["Norman Course", "Riding Golf", "Dmob Course", "Brambleton", "Leesburg Clubhouse"]
var playersData = ["View All", "1 Available", "2 Available", "3 Available", "4 Available"]
var timeData = ["All Day", "Morning", "Afternoon"]
var lblOneData = ["Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available"]
var lblTwoData = ["Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available"]
var lblThreeData = ["Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available"]
var lblFourData = ["Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available","Available", "Available","Available","Available"]

let conSegueIdentifier = "ShowConSegue"
var timeToPass:String!
var availableIndexes = [Int]()
var tblIndex:Int!
var datePicker = UIDatePicker()

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = UINib(nibName: "vwTblCell", bundle: nil)
    tableView.registerNib(nib, forCellReuseIdentifier: "cell")

    coursePicker.hidden = true
    self.courseTextfield.delegate = self

    playerPicker.hidden = true;
    self.playerTextfield.delegate = self

    timePicker.hidden = true;
    self.timeTextfield.delegate = self

    setupDatePicker()
}

func setupDatePicker() {
    dateTextfield.text = "Date"
    dateTextfield.textAlignment = .Center
    dateTextfield.tintColor = UIColor.clearColor()
    datePicker.datePickerMode = .Date

    let toolBar = UIToolbar()
    toolBar.barStyle = .Default
    toolBar.translucent = true
    toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
    toolBar.sizeToFit()

    let doneButton = UIBarButtonItem(title: "Done", style: .Plain, target: self, action: "doneClick")
    let spaceButton = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil)
    let cancelButton = UIBarButtonItem(title: "Cancel", style: .Plain, target: self, action: "cancelClick")
    toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
    toolBar.userInteractionEnabled = true

    // Adds the toolbar to the view
    dateTextfield.inputView = datePicker
    dateTextfield.inputAccessoryView = toolBar
}
func doneClick() {
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = .ShortStyle
    dateTextfield.text = dateFormatter.stringFromDate(datePicker.date)
    dateTextfield.resignFirstResponder()
}
func cancelClick() {
    dateTextfield.resignFirstResponder()
}

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

//tableview

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var numRows = tableData.count
    if(timeTextfield.text == timeData[1]) {
        numRows = 25
    }
    else if(timeTextfield.text == timeData[2]) {
        numRows = 30
    }
    return numRows
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell:TblCell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TblCell
    var lblOneBool = true
    var lblTwoBool = true
    var lblThreeBool = true
    var lblFourBool = true

    if(timeTextfield.text == timeData[2]) {
        cell.hidden = false
        cell.lblTime.text = tableData[indexPath.row + 25]
        cell.lblOne.text = lblOneData[indexPath.row + 25]
        cell.lblTwo.text = lblTwoData[indexPath.row + 25]
        cell.lblThree.text = lblThreeData[indexPath.row + 25]
        cell.lblFour.text = lblFourData[indexPath.row + 25]

                }
    else {
        cell.lblTime.text = tableData[indexPath.row]
        cell.lblOne.text = lblOneData[indexPath.row]
        cell.lblTwo.text = lblTwoData[indexPath.row]
        cell.lblThree.text = lblThreeData[indexPath.row]
        cell.lblFour.text = lblFourData[indexPath.row]
    }

    if(cell.lblOne.text != "Available") {
        lblOneBool = false
    }
    if(cell.lblTwo.text != "Available") {
        lblTwoBool = false
    }
    if(cell.lblThree.text != "Available") {
        lblThreeBool = false
    }
    if(cell.lblFour.text != "Available") {
        lblFourBool = false
    }

    if(playerTextfield.text == playersData[1]) {
        if(lblOneBool || lblTwoBool || lblThreeBool || lblFourBool) {
            cell.hidden = false
        }
        else {
            cell.hidden = true
        }
    }
    else if(playerTextfield.text == playersData[2]) {
        if((lblOneBool && lblTwoBool) || (lblOneBool && lblThreeBool) || (lblOneBool && lblFourBool) || (lblTwoBool && lblThreeBool) || (lblTwoBool && lblFourBool) || (lblThreeBool && lblFourBool)) {
            cell.hidden = false
        }
        else {
            cell.hidden = true
        }
    }
    else if(playerTextfield.text == playersData[3]) {
        if((lblOneBool && lblTwoBool && lblThreeBool) || (lblOneBool && lblTwoBool && lblFourBool) || (lblOneBool && lblThreeBool && lblFourBool) || (lblTwoBool && lblThreeBool && lblFourBool)) {
            cell.hidden = false
        }
        else {
            cell.hidden = true
        }
    }
    else if(playerTextfield.text == playersData[4]) {
        if(lblOneBool && lblTwoBool && lblThreeBool && lblFourBool) {
            cell.hidden = false
        }
        else {
            cell.hidden = true
        }
    }


    return cell
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 120
}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let row = indexPath.row

    performSegueWithIdentifier(conSegueIdentifier, sender: indexPath)
    print(tableData[row])
    if(timeTextfield.text == timeData[2]) {
        tblIndex = row + 25
    }
    else {
        tblIndex = row
    }
}

//end of tableview

//pickerViews

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if(pickerView == coursePicker) {
        return courseData.count
    }
    else if(pickerView == playerPicker) {
        return playersData.count
    }
    else if(pickerView == timePicker) {
        return timeData.count
    }
    return 0
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if(pickerView == coursePicker) {
        return courseData[row]
    }
    else if(pickerView == playerPicker) {
        return playersData[row]
    }
    else if(pickerView == timePicker) {
        return timeData[row]
    }
    return courseData[row]
}

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if(pickerView == coursePicker) {
        courseTextfield.text = courseData[row]
        coursePicker.hidden = true
    }
    else if(pickerView == playerPicker) {
        playerTextfield.text = playersData[row]
        playerPicker.hidden = true
        tableView.reloadData()
    }
    else if(pickerView == timePicker) {
        timeTextfield.text = timeData[row]
        timePicker.hidden = true
        tableView.reloadData()
    }
}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if(textField == courseTextfield) {
        coursePicker.hidden = false
    }
    if(textField == playerTextfield) {
        playerPicker.hidden = false
    }
    else if(textField == timeTextfield) {
        timePicker.hidden = false
    }
    return false
}

//end of pickerViews

//segue
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == conSegueIdentifier {
        let cvc = segue.destinationViewController as! ConViewController;
        let indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow!
        let valueToPass:String

        if(timeTextfield.text == timeData[2]){
            tblIndex = indexPath.row + 25
            valueToPass = tableData[indexPath.row + 25]
        }
        else {
            tblIndex = indexPath.row
            valueToPass = tableData[indexPath.row]
        }
        cvc.conName = courseTextfield.text
        cvc.conDateName = dateTextfield.text
        cvc.conTimeName = valueToPass
        cvc.indexOfTbl = tblIndex
    }
}

}

我只是 copy/pasted 你在空白项目中编写的相同代码 works fine。 所以我想主要问题不在我们的视野范围内,也许当你使用 UITableView. 你能告诉我们这个 View Controller 的其余代码,尤其是当你出队时的那部分 table 查看单元格并初始化 dateTextfield?

P.S。我还强烈建议您 不要 每次需要时都创建 NSDateFormatter 的新实例,因为它不是很省时。最流行的(也是 Apple 开发人员推荐的)做法是使用单例和惰性初始化器来缓存 NSDateFormatters。 Whosebug 有一个