TableViewCell.xib 没有出现在 tableview 上
Posted
技术标签:
【中文标题】TableViewCell.xib 没有出现在 tableview 上【英文标题】:TableViewCell.xib doesn't appear on tableview 【发布时间】:2019-02-18 15:36:52 【问题描述】:这是我的代码,它应该在海关 tableviewcell.xib 中显示 firebase 数据库中的用户,但是当启动应用程序时,tableview 保持为空,我真的不知道代码有什么问题或缺少什么,我想这是一个非常简单的错误,但我无法弄清楚。 提前感谢那些愿意回答的人。
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()
【问题讨论】:
我看到这里有两个步骤。您是否将数据发送到user
?如果是,那么您可以检查您的 tableViewCell 数据
我一直空着@RobertDresler
我将数据提供给用户,但不是表格视图,因此表格视图可能有问题@LohithKorupolu
先在viewDidLoad()
注册单元格。
【参考方案1】:
如果您没有在情节提要中为 tableView
设置委托和数据源,请以编程方式进行:
override func viewDidLoad()
super.viewDidLoad()
//Add these 2 lines, might be missed.
self.tableview.delegate = self
self.tableview.dataSource = self
retrieveUsers()
【讨论】:
谢谢,这正是缺少的,我也错过了:tableview.register(UINib(nibName: "UserCardTableViewCell", bundle: nil), forCellReuseIdentifier: "UserCell")【参考方案2】:清单:
设置 tableView 委托和数据源
self.tableview.delegate = self
self.tableview.dataSource = self
注册自定义tableViewCell
?
让 cellNIb = UINib.init(nibName:"Identifier_Name", bundle: nil) register(cellNIb, forCellReuseIdentifier: 标识符)
检查func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
的返回计数
【讨论】:
【参考方案3】:你忘记了两件事:
将表视图的dataSource
设置为控制器。如果您不这样做,您的tableView
将不需要任何数据。所以设置在控制器的viewDidLoad
tableview.dataSource = self
如果您为单元格创建了自定义 xib,请不要忘记为表格视图注册您的自定义单元格(也可以在 viewDidLoad
中进行)
tableview.register(UINib(nibName: "UserCardTableViewCell", bundle: nil), forCellReuseIdentifier: "UserCell")
如果您也需要didSelectRowAt
之类的UITableViewDelegate
方法,请不要忘记将表格视图的delegate
也设置为您的控制器
tableview.delegate = self
【讨论】:
以上是关于TableViewCell.xib 没有出现在 tableview 上的主要内容,如果未能解决你的问题,请参考以下文章
ios tableViewCell.xib文件生成多个单元格
将多个自定义 TableViewCell Xib 索引到 TableView
在swift 3中的tableview中更新tableviewcell中的特定行?