我正在构建一个表视图,它只包含一个按钮,带有不同的标签。
我正在使用表视图来显示按钮列表。
这是一个包含按钮名称的结构。

struct post {
   let name : String
}

我已经把数据从firebase推送到了structure post。
var posts = [post]()
override func viewDidLoad() {
       super.viewDidLoad()
        let db = Firestore.firestore()
        db.collection(Auth.auth().currentUser?.uid as Any as! String).getDocuments() { (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in querySnapshot!.documents {
                   // print("\(document.documentID) => \(document.data())")
                    self.posts.insert(post(name: document.documentID), at: 0)
                }
                self.contents.reloadData()
            }
        }
    }

这些是表视图的正常功能
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return posts.count
    }
    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! cellview
        cell.programnames.titleLabel?.text = posts[indexPath.row].name
        return cell
    }

cellview.swift的设计如下
class cellview: UITableViewCell {


    @IBOutlet weak var programnames: UIButton!
    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
    }

请告诉我我的错误。按钮“programnames”在模拟器的表视图中不可见

最佳答案

我发现有几个东西丢失了,这可能导致UITableViewDataSource不能被调用
您需要在UITableView.dataSource = self中设置viewDidLoad
您需要在cellview.xib中注册viewDidLoad,如下所示:

contents.register(UINib(nibName: "cellview", bundle: nil), forCellReuseIdentifier: "Cell")

选项的原因是这些选项可以是nil,如果是,则应用程序将崩溃,请避免强制展开选项!,下面是带有可选链接的示例guard语句
guard err == nil, let documents = querySnapshot?.documents else {
    // error handling here
    return
}

self.posts = documents.map { post(name: $0.documentID) }

我在您的代码中看到使用posts.insert(..., at: 0)来反转数组,如果它是故意使用以下命令的话:
self.posts = documents.map({ post(name: $0.documentID) }).reversed()

10-08 20:13