我正在创建一个iOS应用程序,用于从Firebase数据库加载数据,然后使用该信息创建UI表视图。我创建了一个原型单元格,其中包含重用标识符“cell”以及带有标签的自定义单元格类。但是,当应用程序加载时,创建的单元格不具有我为原型单元格创建的样式,即使可重用单元格具有与原型单元格相同的标识符。我无法更改原型单元格的标签文本,我在加载应用程序时获得的是具有默认单元格高度的空白行,而不是我添加到原型单元格中的自定义。
以下是UITableView文件的代码
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var ref: DatabaseReference!
var postList = [Post]()
var refHandle : UInt!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
//let userID = Auth.auth().currentUser?.uid
ref = Database.database().reference().child("posts") //.child(userID)
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "cell")
fetchPosts()
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postList.count
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! PostTableViewCell
//set cell content
let contentOfCellPost = postList[indexPath.row]
cell.title?.text = contentOfCellPost.post_words
return cell
}
func fetchPosts () {
let query = ref.queryOrdered(byChild: "timestamp").queryLimited(toFirst: 10)
query.observe(.value) { (snapshot) in
for child in snapshot.children.allObjects as! [DataSnapshot] {
if let value = child.value as? NSDictionary {
let post = Post()
let poster = value["poster"] as? String ?? "Name not found"
let post_content = value["post"] as? String ?? "Content not found"
post.post_words = post_content
post.poster = poster
self.postList.append(post)
DispatchQueue.main.async { self.tableView.reloadData() }
}
}
}
}
}
这是我为自定义单元格创建的类:
import UIKit
class PostTableViewCell: UITableViewCell {
@IBOutlet weak var title: 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
}
}
但是,当我将可重用单元格属性更改为
时cell.textLabel?.text = contentOfCellPost.post_words
我可以在表格视图中看到该文本,但它仍然不是基于故事板中的原型单元格规范。
答案 0 :(得分:1)
您错过了实施 heightForRowAt 或者如果您愿意,可以使用动态tableView单元格高度
答案 1 :(得分:0)
你的问题就在这一行:
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "cell")
如果您为表视图注册了一个类,那么当您将其出列时,您将获得该类的空白单元格而不是故事板中的单元格。所以不会设置任何东西(IBOutlet,IBAction等)。
如果您只想将故事板(或XIB文件)中定义的原型单元格出列,那么您也不需要注册它。
答案 2 :(得分:0)
当您使用Storyboard时,请从viewDidLoad函数中删除以下行。
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "cell")