TableViewCell.xib не отображается в виде таблицы - PullRequest
0 голосов
/ 18 февраля 2019

Вот мой код, он должен отображать пользователей в базе данных firebase в таможне tableviewcell.xib, но при запуске приложения табличное представление остается пустым, я действительно не знаю, что не так в коде или чего не хватает, я думаюэто действительно простая ошибка, но я не могу понять это.Заранее спасибо тем, кто ответит.

import UIKit
import Firebase
class UsersTableView: UIViewController, UITableViewDelegate, UITableViewDataSource {

// Outlets.
@IBOutlet weak var tableview: UITableView!

// Var.
var user = [User]()

override func viewDidLoad() {
    super.viewDidLoad()


    retrieveUsers()

    // Do any additional setup after loading the view.
}

func retrieveUsers() {
    let ref = Database.database().reference()
    ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { DataSnapshot in

        let users = DataSnapshot.value as! [String: AnyObject]
        self.user.removeAll()
        for (_, value) in users{
            //let uid = Auth.auth().currentUser!.uid
            if let uid = value["userID"] as? String{
                if uid != Auth.auth().currentUser!.uid {
                    let userToShow = User()
                    if let fullName = value["username"] as? String , let imagePath = value["photoURL"] as? String {
                        userToShow.username = fullName
                        userToShow.imagePath = imagePath
                        userToShow.userID = uid
                        self.user.append(userToShow)

                    }
                }
            }
        }
        self.tableview.reloadData()
    })
    ref.removeAllObservers()
}

func numberOfSections(in tableView: UITableView) -> Int {
    return  1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = tableview.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! UserTableViewCell

    cell.nameLabel.text = self.user[indexPath.row].username
    cell.userID = self.user[indexPath.row].userID
    cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!)
    //checkFollowing(indexPath: indexPath)

    return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return user.count ?? 0
}
  }

  extension UIImageView{

func downloadImage(from imgURL: String!) {
    let url = URLRequest(url: URL(string: imgURL)!)

    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

        if error != nil{
            print(error)
            return
        }

        DispatchQueue.main.async {
            self.image = UIImage(data: data!)
        }
    }
    task.resume()
}
  }

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

Контрольный список:

  1. Установить делегат tableView и источник данных

    self.tableview.delegate = self

    self.tableview.dataSource = self

  2. Зарегистрированный пользовательский tableViewCell?

    let cellNIb = UINib.init (nibName: "Identifier_Name", bundle: nil) регистр (cellNIb, forCellReuseIdentifier: идентификатор)

  3. проверить счетчик возврата func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

0 голосов
/ 18 февраля 2019

Есть две вещи, которые вы забыли:

  • Установите dataSource вашего табличного представления в качестве контроллера.Если вы этого не сделаете, ваш tableView не захочет никаких данных.Поэтому установите его в контроллере viewDidLoad

    tableview.dataSource = self
    
  • Если вы создали пользовательский xib для своей ячейки, не забудьте зарегистрировать свою пользовательскую ячейку для просмотра таблицы (также вы можете сделать этов viewDidLoad)

    tableview.register(UINib(nibName: "UserCardTableViewCell", bundle: nil), forCellReuseIdentifier: "UserCell")
    

Если вам нужны UITableViewDelegate методы, такие как didSelectRowAt, не забудьте установить delegate вашего табличного представления какваш контроллер тоже

tableview.delegate = self
0 голосов
/ 18 февраля 2019

Если вы не установили делегат и источник данных для вашего tableView в вашей раскадровке, сделайте это программно:

override func viewDidLoad() {
    super.viewDidLoad()

   //Add these 2 lines, might be missed.
    self.tableview.delegate = self
    self.tableview.dataSource = self

    retrieveUsers()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...