为什么我的datePicker没有显示?

时间:2015-11-16 21:56:43

标签: ios swift uidatepicker

我有一个基本设置,当文本字段显示时,datePicker会显示。我在表中有多个元素,datePicker应该显示在这些元素中。我知道代码是有效的,因为我创建了一个完美的单一视图。我也是新手。我相信它可能会出现在我的桌面视图后面。我该如何测试/修复它? 这是我的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
    }
}

}

1 个答案:

答案 0 :(得分:1)

我只是复制/粘贴您在空白项目中编写的相同代码works fine。 所以我想主要的问题是我们的观点,也许当你使用 UITableView时。你能告诉我们这个View Controller的其余代码,特别是当你将表视图单元格和初始化 dateTextfield

P.S。我强烈建议您每次需要时创建 NSDateFormatter 的新实例,因为它不是非常节省时间。最受欢迎(并由Apple开发人员推荐)的做法是使用单例和延迟初始化器来缓存 NSDateFormatter 。 StackOverflow有一个really good topic