компоненты в моей ячейке таблицы не видны - PullRequest
1 голос
/ 20 апреля 2019

Я создаю табличное представление, содержащее только кнопку с разными метками.

Я использую табличное представление, чтобы представить список кнопок.

это структура, содержащая именакнопки.

struct post {
   let name : String
} 

Я переместил данные из базы данных на пост структуры.

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 isоформлен следующим образом

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
    }

Пожалуйста, скажите мне мою ошибку в этом.Кнопки «имена программ» не отображаются в табличном представлении в симуляторе

1 Ответ

0 голосов
/ 20 апреля 2019

Я вижу, что отсутствует пара вещей, из-за которых UITableViewDataSource не может быть вызван

  1. Вам нужно установить UITableView.dataSource = self в viewDidLoad
  2. Вам нужно зарегистрироваться cellview.xib в viewDidLoad, например:

    contents.register(UINib(nibName: "cellview", bundle: nil), forCellReuseIdentifier: "Cell")
    
  3. Необязательные, потому что это может быть nil, и если это произойдет, ваше приложение вылетит, избегайте принудительного развертывания опций !, вот пример guard оператора с необязательной цепочкой

    guard err == nil, let documents = querySnapshot?.documents else {
        // error handling here
        return
    }
    
    self.posts = documents.map { post(name: $0.documentID) }
    
  4. Я видел в вашем коде использование posts.insert(..., at: 0), которое обратит массив, еслиВместо этого нарочно используйте следующее:

    self.posts = documents.map({ post(name: $0.documentID) }).reversed()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...