自定义单元格已在 TableView 控制器中注册和使用,但在应用程序中是默认单元格

Custom cell is registered and used in TableView controller but in app is default cell

我想在 UITableViewController 中使用我的自定义单元格,它在 TableViewController 中使用。我注册自定义单元格并在 cellForRowAt 方法中使用它。单元格是在情节提要中“创建”的。控制器的所有 classes 都已设置,标识符也已设置,自定义单元格也已选择 class 和标识符。但是当我启动我的应用程序时,它显示默认的空单元格。这是我的代码:

class TabBarController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let beersList = BeersListModuleBuilder.createBeersListView()
        let beersListNavController = UINavigationController(rootViewController: beersList)
        beersListNavController.tabBarItem = UITabBarItem(title: "All beers", image: nil, tag: 1)
        
        let favoriteBeersList = UIViewController()
        let favoriteBeersListNavController = UINavigationController(rootViewController: favoriteBeersList)
        favoriteBeersListNavController.tabBarItem = UITabBarItem(title: "Favorites", image: nil, tag: 2)
        self.viewControllers = [beersListNavController, favoriteBeersListNavController]
    }
}

class BeersListTableViewController: UITableViewController{

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.register(BeerCell.self, forCellReuseIdentifier: "BeerCell")
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "BeerCell", for: indexPath) as! BeerCell
        cell.beerName?.text = "beer.name"
        cell.beerABV?.text = "beer.abv"
        cell.addToFavoritesButton?.setImage(UIImage(systemName:"star"), for: .normal)
        return cell
    }
}

class BeerCell: UITableViewCell {
    @IBOutlet var beerName: UILabel!
    @IBOutlet var beerABV: UILabel!
    @IBOutlet var addToFavoritesButton: UIButton!
}

GitHub 回购:https://github.com/IgorShevtshenko/BeerList

只需删除这一行:

self.tableView.register(BeerCell.self, forCellReuseIdentifier: "BeerCell")

当您在情节提要场景中使用原型单元时,情节提要会根据重用标识符为您注册 class。仅当您使用自定义 class 或 nib.

时才需要注册您的手机