gpt4 book ai didi

ios - Swift:来自 XIB 文件的多个自定义 TableViewCells

转载 作者:行者123 更新时间:2023-11-28 10:59:45 24 4
gpt4 key购买 nike

我正在关注这个 tutorial from Jared Davidson在我的应用程序中使用 XIB 文件实现多个 CustomTableViewCells。我的 Xcode 项目中有这些文件:Image Link Xcode Files .

我有一个 TextElement:Image Link和我有一个 ImageElement:Image Link

我想用离线数据测试它,以便在它工作后实现 Firebase。这是我的 Home.swift 数据结构:

import Foundation
import FirebaseDatabase

struct Home {

var key:String!
let itemRef:FIRDatabaseReference?
var userUID:String!
var user:String!

// Home Element Cell Content
var elementSortNumber:Int!
var elementCellType:String!
var referenceElementID:String!

var databaseVersion:String!

init (key:String = "",
uid:String,
user:String,

elementSortNumber:Int,
elementCellType:String,
referenceElementID:String,
databaseVersion:String) {

// General (Security tracking)
self.key = key
self.itemRef = nil
self.userUID = uid
self.user = user

// Home Element Cell Content
self.elementSortNumber = elementSortNumber
self.elementCellType = elementCellType
self.referenceElementID = referenceElementID

}

init (snapshot:FIRDataSnapshot) {

// General (Security tracking)
key = snapshot.key

itemRef = snapshot.ref

if let addedByUser = snapshot.value as? NSDictionary, let _temp = addedByUser["User"] as? String {
user = _temp
} else {
user = ""
}

// Home Element Cell Content
if let homeElementSortNumber = snapshot.value as? NSDictionary, let _temp = homeElementSortNumber["Title"] as? Int {
elementSortNumber = _temp
} else {
elementSortNumber = 50
}

if let homeElementCellType = snapshot.value as? NSDictionary, let _temp = homeElementCellType["Content"] as? String {
elementCellType = _temp
} else {
elementCellType = ""
}

if let homeElementID = snapshot.value as? NSDictionary, let _temp = homeElementID["Ref Element ID"] as? String {
referenceElementID = _temp
} else {
referenceElementID = ""
}

if let textDatabaseVersion = snapshot.value as? NSDictionary, let _temp = textDatabaseVersion["DB Version"] as? String {
databaseVersion = _temp
} else {
databaseVersion = ""
}

}

这是我的 TableViewController 的代码:

import UIKit

class HomeTableViewController: UITableViewController {

var arrayOfCellData = [Home]()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.

arrayOfCellData =
[Home(key: "",
uid:"",
user:"",

elementSortNumber:1,
elementCellType:"TextElement",
referenceElementID:"123ABC",
databaseVersion:"1"),

Home(key: "",
uid:"",
user:"",

elementSortNumber:1,
elementCellType:"ImageElement",
referenceElementID:"QWERTZ",
databaseVersion:"1"),

Home(key: "",
uid:"",
user:"",

elementSortNumber:1,
elementCellType:"TextElement",
referenceElementID:"XYZ789",
databaseVersion:"1")]

}

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

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
// If I return 1 the app crashes and if I comment this function it also crashes.
return 0
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrayOfCellData.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

if arrayOfCellData[indexPath.row].elementCellType == "TextElement" {

let textElementCell = Bundle.main.loadNibNamed("TextElementTableViewCell", owner: self, options: nil) as! TextElementTableViewCell

textElementCell.textElementTitleLabel.text = arrayOfCellData[indexPath.row].referenceElementID

return textElementCell

}

else if arrayOfCellData[indexPath.row].elementCellType == "ImageElement" {

let imageElementCell = Bundle.main.loadNibNamed("ImageElementTableViewCell", owner: self, options: nil) as! ImageElementTableViewCell

imageElementCell.imageElementImageView.image = UIImage(named: "placeholder")

return imageElementCell
}

else {

let textElementDefaultCell = Bundle.main.loadNibNamed("TextElementTableViewCell", owner: self, options: nil) as! TextElementTableViewCell

textElementDefaultCell.textElementTitleLabel.text = arrayOfCellData[indexPath.row].referenceElementID

return textElementDefaultCell
}

}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

if arrayOfCellData[indexPath.row].elementCellType == "TextElement" {
return 116
}
else if arrayOfCellData[indexPath.row].elementCellType == "ImageElement" {
return 275
}
else {
return 116
}
}

}

这就是问题所在:模拟器是空的,如您在这张图片中所见 Image Link为什么?我该如何解决?

我非常感谢您的帮助。谢谢。

最佳答案

在viewdidload中如下注册xib文件:

tableView.register(UINib(nibName: "TextElementTableViewCell", bundle: Bundle.main), forCellReuseIdentifier: "TextElementTableViewCellIdentifier")

然后在 cellForRowIndex path:Access cell using their identifier

let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "TextElementTableViewCellIdentifier", for: indexPath) as! TextElementTableViewCell

关于ios - Swift:来自 XIB 文件的多个自定义 TableViewCells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com