问题描述
我制作了一个 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
}
}
[
]解决方法
除了代码的顺序之外,我的所有代码都是正确的。在查看并重新分配 saveButton Action 内部的准备转场声明后,将其重新分配到其外部。我能够将数据从 InputScreen 传递到主屏幕上 TableView 中的 Custom TableView Cell。