【问题标题】:UITableView always displays basic cell instead of custom cell in SwiftUITableView 在 Swift 中总是显示基本单元格而不是自定义单元格
【发布时间】:2018-06-29 22:54:22
【问题描述】:

我花了几个小时试图解决这个问题,但我的简单应用程序仍然显示基本单元格类型,而不是我的原型单元格。我知道在加载视图后使用标识符并注册,但它仍然显示只有一个标签的基本单元格。

到目前为止,这是我的代码:

我的原型正在使用这个 UITableViewCell:

class CoinTableViewCell: UITableViewCell {

    @IBOutlet weak var coinIcon: UIImageView!
    @IBOutlet weak var coinTitleLabel: UILabel!
    @IBOutlet weak var holdings: UILabel!

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

UITableViewController:

class CoinTableViewController: UITableViewController {

  var coins = ["Coin1","Coin2","Coin3"]

  override func viewDidLoad() {
       super.viewDidLoad()
       self.tableView.register(CoinTableViewCell.self, forCellReuseIdentifier: "currency_cell")
   }

  override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }

   override func numberOfSections(in tableView: UITableView) -> Int {
       return 1
   }

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

   override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

       let cell:CoinTableViewCell! = self.tableView.dequeueReusableCell(withIdentifier: "currency_cell", for: indexPath) as! CoinTableViewCell
       let coinName = coins[indexPath.row]
       cell.coinTitleLabel?.text = coinName
       return cell!

   }
}

如果有人能帮我解决这个问题,我将不胜感激!

【问题讨论】:

  • let cell:CoinTableViewCell! = self.tableView.dequeueReusableCell(withIdentifier: "currency_cell", for: indexPath) as! CoinTableViewCell 如果不是CoinTableViewCell 会崩溃.. 其他地方有错误..
  • 如果您使用情节提要,则无需注册单元重用标识符。我同意,您这里还有其他问题。您是否为表格视图设置了委托和数据源?
  • 是的,我通过在 viewDidLoad() 中包含 self.tableView.delegate = self 和 self.tableView.dataSource = self 来做到这一点。为了更好的可读性,我在这里省略了这些行。
  • 您是否对单元格设置了约束以显示内容?您是否设置了断点来验证您的 numberOfRow 函数是否被调用?你是如何创建这个视图控制器的?它是故事板中的初始视图控制器吗?如果您在单元格中对行进行条件解包 cell.coinTitkeLabel.text 会发生什么?您是否在原型单元格和单元格类之间链接了 IBOutlets?
  • pera 发现了这个错误。我已经用一个普通的原型替换了我的原型。

标签: ios swift uitableview xcode9


【解决方案1】:

您是直接在情节提要的 tableview 上创建自定义单元格,对吗? 如果是这种情况,那么您不需要在 viewDidLoad 中注册单元格,因为情节提要会处理这一点。您只需将其 deque 即可。

如果您手动注册它,您只需覆盖故事板所做的事情并最终获得一个常规单元格,因为该单元格是从代码中实例化的,而不是从故事板中实例化的。

干杯

【讨论】:

  • 你是对的!删除注册确实解决了我的问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 2019-08-21
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多