自定义单元格已在 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!
}
只需删除这一行:
self.tableView.register(BeerCell.self, forCellReuseIdentifier: "BeerCell")
当您在情节提要场景中使用原型单元时,情节提要会根据重用标识符为您注册 class。仅当您使用自定义 class 或 nib.
时才需要注册您的手机
我想在 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!
}
只需删除这一行:
self.tableView.register(BeerCell.self, forCellReuseIdentifier: "BeerCell")
当您在情节提要场景中使用原型单元时,情节提要会根据重用标识符为您注册 class。仅当您使用自定义 class 或 nib.
时才需要注册您的手机