无法在我的 TableView 中显示自定义单元格文件?

问题描述

我制作了一个 NIB 自定义单元格文件,但我根本无法在我的 tableView 中显示自定义单元格文件代码没有错误并且可以运行,但我很难显示自定义单元格。我最初认为我的问题出在我创建的 Unwind Segue 以将数据从 InputScreen 传递到 ViewController 但我不确定此时可能是什么问题?

非常感谢任何帮助。

主视图控制器


class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    
    var IzParcelz = [IzParcel]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let nib = UINib(nibName: "IzparcelCell",bundle: nil)
        tableView.register(nib,forCellReuseIdentifier: "IzparcelCell")
        tableView.delegate = self
        tableView.dataSource = self
    }
    // MARK: - TableView data source
    
    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        return IzParcelz.count
    }
    
    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "IzparcelCell",for: indexPath) as! IzparcelCell
   
        let izPackage = IzParcelz[indexPath.row]
        cell.nameLabel.text = izPackage.name
        cell.addressLabel.text = izPackage.address
        cell.trackingNumLabel.text = izPackage.trackingNumber

        return cell
    }
    // MARK: - TableView Delegate
    
    func tableView(_ tableView: UITableView,canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }
    
    func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            IzParcelz.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath],with: .fade)
            IzParcel.saveIzParcel(IzParcelz)
            
        }
    }

    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {

        guard segue.identifier == "saveUnwind" else { return }
        
        let sourceViewController = segue.source as! InputViewController
        
        if let P = sourceViewController.izParcel {
            if let selectedindexPath = tableView.indexPathForSelectedRow {
                IzParcelz[selectedindexPath.row] = P
                tableView.reloadRows(at: [selectedindexPath],with: .none)
            } else {
                let newIndexPath = IndexPath(row: IzParcelz.count,section: 0)
                IzParcelz.append(P)
                tableView.insertRows(at: [newIndexPath],with: .automatic)
            }
        }
        
        IzParcel.saveIzParcel(IzParcelz)
    }
    
    override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
        if segue.identifier == "showDetails" {
            let izViewController = segue.destination as! InputViewController
            let indexPath = tableView.indexPathForSelectedRow!
            let selectedTodo = IzParcelz[indexPath.row]

            izViewController.izParcel = selectedTodo
        }
    }
} 

输入视图控制器

import UIKit

class InputViewController: UITableViewController {
    
    var izParcel: IzParcel?
    
    @IBOutlet weak var statusTextLabel: UITextField!
    
    @IBOutlet weak var nameTextLabel: UITextField!
    @IBOutlet weak var addresstextLabel: UITextField!
    @IBOutlet weak var trackingNumTextLabel: UITextField!
    
    @IBOutlet weak var notesTextLabel: UITextField!
    
    @IBOutlet weak var statusUpdateTextLabel: UIDatePicker!
    @IBOutlet weak var dateAndTimeTextLabel: UIDatePicker!
    
    @IBOutlet weak var saveButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let izParcels = izParcel {
            nameTextLabel.text = izParcels.name
            addresstextLabel.text = izParcels.address
            trackingNumTextLabel.text = izParcels.trackingNumber
            notesTextLabel.text = izParcels.notes
            dateAndTimeTextLabel.date = izParcels.dateAndTime
            statusUpdateTextLabel.date = izParcels.statusUpdated
        }
    }
    
    @IBAction func deleteButton(_ sender: UIButton) {
        self.dismiss(animated: true,completion: nil)
    }
    
    @IBAction func saveButton(_ sender: UIButton) {
        print("pressedButtttonnnnTesst")
        self.performSegue(withIdentifier: "saveUnwind",sender: self)
}
        func prepare(for segue: UIStoryboardSegue,sender: Any?) {
            guard segue.identifier == "saveUnwind" else { return }
            
            let name = nameTextLabel.text!
            let address = addresstextLabel.text!
            let trackingNumber = trackingNumTextLabel.text!
            let notes = notesTextLabel.text!
            let dates = dateAndTimeTextLabel.date
            let statusUpdate = statusUpdateTextLabel.datePickerMode
            
            izParcel = IzParcel(name: name,address: address,trackingNumber: trackingNumber,notes: notes,dateAndTime: dates,statusUpdated: dates)
        }
    }

IZPARCEL 细胞


import UIKit

class IzparcelCell: UITableViewCell {

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var addressLabel: UILabel!
    @IBOutlet weak var trackingNumLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool,animated: Bool) {
        super.setSelected(selected,animated: animated)

        // Configure the view for the selected state
    }   
}

[

Screenshot of Unwind Segue Connection

]

Screenshot of what's supposed to display in the TableView

解决方法

除了代码的顺序之外,我的所有代码都是正确的。在查看并重新分配 saveButton Action 内部的准备转场声明后,将其重新分配到其外部。我能够将数据从 InputScreen 传递到主屏幕上 TableView 中的 Custom TableView Cell。