关于pickerview数据显示错乱的问题

想做一个课程表app,现在是想用三个pickerview给用户选择周几上课以及上课下课的时间,但是pickerview选出来的时间是错乱的,完全没有规律,求
解答一下(做的第一个app,自学的)

img

img

  • img

//
//  ViewController.swift
//  Timetable
//
//  Created by 魏瑾 on 2021/10/10.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var ChooseWeekTextField: UITextField!
    
    @IBOutlet weak var ChooseStartTimeTextField: UITextField!
    
    @IBOutlet weak var ChooseEndTimeTextField: UITextField!
    
    let Week = ["周一","周二","周三","周四","周五","周六","周天"]
    let StartTimeHour = ["","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"]
    let StartTimeScend = ["","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59"]
    let EndTimeHour = ["","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23"]
    let EndTimeScend = ["","01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59"]
    
    var WeekPickerView = UIPickerView()
    var StarTimePickerView = UIPickerView()
    var EndTimePickerView = UIPickerView()
    
    var ClassWeekDay = ""
    var ClassStartTimeHour = ""
    var ClassStartTimeScend = ""
    var ClassEndTimeHour = ""
    var ClassEndTimeScend = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        ChooseWeekTextField.inputView = WeekPickerView
        ChooseStartTimeTextField.inputView = StarTimePickerView
        ChooseEndTimeTextField.inputView = EndTimePickerView
        
        ChooseWeekTextField.textAlignment = .center
        ChooseStartTimeTextField.textAlignment = .center
        ChooseEndTimeTextField.textAlignment = .center
        
        WeekPickerView.dataSource = self
        WeekPickerView.delegate = self
        StarTimePickerView.dataSource = self
        StarTimePickerView.delegate = self
        EndTimePickerView.dataSource = self
        EndTimePickerView.delegate = self
        
        WeekPickerView.tag = 1
        StarTimePickerView.tag = 2
        EndTimePickerView.tag = 3
        
        creatChooseWeekPicker()
        
    }

    func creatChooseWeekPicker() {
        
        let ToolBar = UIToolbar()
        ToolBar.sizeToFit()
        
        let DoneButton = UIBarButtonItem(title: "确认", style: .done, target: nil, action: #selector(DoneButtonPressed))
        ToolBar.setItems([DoneButton], animated: true)
        
        ChooseWeekTextField.inputAccessoryView = ToolBar
        ChooseStartTimeTextField.inputAccessoryView = ToolBar
        ChooseEndTimeTextField.inputAccessoryView = ToolBar
    }
    
    @objc func DoneButtonPressed() {
        self.view.endEditing(true)
    }

}

extension ViewController: UIPickerViewDataSource {
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        switch pickerView.tag {
        case 1:
            return 1
        case 2:
            return 4
        case 3:
            return 4
        default:
            return 1
        }
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        switch pickerView.tag {
        case 1:
            return Week.count
        case 2:
            switch component {
            case 0:
                return StartTimeHour.count
            case 1:
                return 1
            case 2:
                return StartTimeScend.count
            case 3:
                return 1
            default:
                return 0
            }
        case 3:
            switch component {
            case 0:
                return EndTimeHour.count
            case 1:
                return 1
            case 2:
                return EndTimeScend.count
            case 3:
                return 1
            default:
                return 0
            }
        default:
            return 1
        }
    }
    
}

extension ViewController: UIPickerViewDelegate {
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        switch pickerView.tag {
        case 1:
            ClassWeekDay = Week[row]
            return Week[row]
        case 2:
            switch component {
            case 0:
                ClassStartTimeHour = StartTimeHour[row]
                return StartTimeHour[row]
            case 1:
                return "时"
            case 2:
                ClassStartTimeScend = StartTimeScend[row]
                return StartTimeScend[row]
            case 3:
                return "分"
            default:
                return "请重新选择"
            }
        case 3:
            switch component {
            case 0:
                ClassEndTimeHour = EndTimeHour[row]
                return EndTimeHour[row]
            case 1:
                return "时"
            case 2:
                ClassEndTimeScend = EndTimeScend[row]
                return EndTimeScend[row]
            case 3:
                return "分"
            default:
                return "请重新选择"
            }
        default:
            return "haha"
        }
    }
    
    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        switch pickerView.tag {
        case 1:
            ChooseWeekTextField.text = Week[row]
        case 2:
            ChooseStartTimeTextField.text = "\(ClassStartTimeHour)\(ClassStartTimeScend)分"
        case 3:
            ChooseEndTimeTextField.text = "\(ClassEndTimeHour)\(ClassEndTimeScend)分"
        default:
            return nil
        }
        return nil
    }
    
}


你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。