簡體   English   中英

不是從原型單元創建可重復使用的單元?

[英]Reusable cell not creating from prototype cell?

我正在創建一個從Firebase數據庫加載數據的iOS應用程序,然后使用該信息創建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

我可以在表格視圖中看到該文本,但是它仍然不是基於故事板上的原型單元格規范。

表格視圖的圖像

您想實現heightForRowAt錯過了,或者如果願意,可以使用動態tableView單元格的高度

您的問題是這一行:

tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "cell")

如果為表視圖注冊一個類,則在將其從隊列中取出時,會得到該類的空白單元,而不是情節提要中的一個。 因此,將不會設置任何內容(IBOutlet,IBAction等)。

如果您只想讓故事板(或XIB文件)中定義的原型單元出隊,則也不需要注冊它。

在使用情節提要時,請從viewDidLoad函數中刪除以下行。

            tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "cell")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM