我的label.text为零,可快速使用可重用库

问题描述 投票:1回答:1

我正在尝试显示内容为“ aaaaaaaaaaaaaaaaaaaaA”的标签。我正在使用可重用库。尽管我以正确的方式连接了IBOutlet,但是单元格的label和imageView没有显示内容。

这是我的细胞班

import UIKit
import Reusable
import SDWebImage

protocol ChooseMemberTableViewCellDelegate: AnyObject {
    func addUserToGroup(forUser user: User)
}

class ChooseMemberTableViewCell: UITableViewCell, Reusable {

    @IBOutlet weak var userImageView: UIImageView!
    @IBOutlet weak var userNameLabel: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

    func setupCell(data: User) {
        userNameLabel?.text = "aaaaaaaaaaaaaaaaA"
//        userNameLabel?.text = "\(data.userName)"
//        let url = URL(string: data.image)
//        userImageView.sd_setImage(with: url ?? "", completed: nil)
    }
}

这是我的ViewController,我注册了单元格

//
//  MembersViewController.swift
//  Message
//
//  Created by Minh Tâm on 1/9/20.
//  Copyright © 2020 Minh Tâm. All rights reserved.
//

import UIKit
import Firebase
import Reusable
import Then

private enum Constants {
    static let numberOfSection = 1
    static let heightForRows: CGFloat = 60
}

final class ChooseMembersViewController: UIViewController {

    @IBOutlet private weak var searchMembers: UISearchBar!
    @IBOutlet private weak var listContacts: UITableView!

    var searchUser = [User]()
    private let database = Firestore.firestore()
    var users = [User]()
    private var currentUser = Auth.auth().currentUser
    private var roomRepository = RoomRepository()
    private var userRepository = UserRepository()

    var groupName: String?
    private var selectUserArray = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
//        userRepository.fetchUser()
        configListTableView()
        fetchUser()

    }

    func configListTableView() {
        listContacts.do {
            $0.register(cellType: ChooseMemberTableViewCell.self)
            $0.delegate = self
            $0.dataSource = self
        }
    }

    public func fetchUser() {
        database.collection("users").getDocuments(){ (querySnapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                if let snapshot = querySnapshot {
                    for document in snapshot.documents {
                        let data = document.data()
                        let uid = data["uid"] as? String ?? ""
                        if uid != self.currentUser?.uid {
                            let newUser = User.map(uid: uid, dictionary: data)
                            self.users.append(newUser)
                        }
                    }
                }
                self.searchUser = self.users

                self.listContacts.reloadData()
            }
        }
    }

    @IBAction func handleBack(_ sender: UIButton) {
        self.dismiss(animated: false)
    }

    @IBAction func handleDone(_ sender: UIButton) {
        guard let currentUser = currentUser, let groupName = groupName else { return }
        selectUserArray.append(currentUser.uid)
        let time = NSNumber(value: Int(NSDate().timeIntervalSince1970))
        roomRepository.updateFirebase(groupName: groupName, time: time, selectUserArray: selectUserArray)
    }

}

extension ChooseMembersViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if searchText.isEmpty {
            searchUser = users
        } else {
            searchUser = users.filter { $0.userName.lowercased().contains(searchText.lowercased()) }
        }
        listContacts.reloadData()
    }
}

extension ChooseMembersViewController: UITableViewDelegate, UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return Constants.numberOfSection
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return searchUser.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = listContacts.dequeueReusableCell(for: indexPath, cellType: ChooseMemberTableViewCell.self).then {
            let user = searchUser[indexPath.row]
            $0.setupCell(data: user)
        }
        return cell
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return Constants.heightForRows
    }
}

extension ChooseMembersViewController: ChooseMemberTableViewCellDelegate {
    func addUserToGroup(forUser user: User) {
        let selectedUserUid = user.uid
        selectUserArray.append(selectedUserUid)
    }
}

单元格不显示标签和imageView的信息

ios swift xcode debugging tableview
1个回答
0
投票
  1. [ChooseMemberTableViewCell是正确的,但我建议使用userNameLabel.text = "aaaaaaaaaaaaaaaaA"(对于userNameLabel而言不是可选的)

  2. 如果您将故事板中的单元格用于tableView-无需中进行注册,则UIStoryboard已自动注册其单元格。我的意思是您应该删除以下行:listContacts.register(cellType: ChooseMemberTableViewCell.self)

  3. 应该为情节提要板中的单元格添加标识符ChooseMemberTableViewCellenter image description here

  4. 应该适用于cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell: ChooseMemberTableViewCell = tableView.dequeueReusableCell(for: indexPath) cell.setupCell(data: user) .then { let user = searchUser[indexPath.row] $0.setupCell(data: user) } return cell }

我想就是这样。我已经完成,并且在tableView

中看到带有文本的标签
© www.soinside.com 2019 - 2024. All rights reserved.