我有一个带有表格视图的控制器。在视图中定义了我的单元格,然后将其绑定到表视图。 (请原谅这个术语)。应用程序构建并运行良好,但单元格中定义的标签都没有显示任何内容。除细胞分离器外,整个表是空白的。我已经按照大量的教程进行了广泛搜索,原因是如何创建(Create a Table View - Apple docs),要检查的设置,所有结果都相同。我也尝试过清理,重新启动Xcode等。这是Xcode 8 / Swift 3。
视图控制器有一个表视图,我在viewDidLoad中注册了这样的单元类
self.tableView.registerCellClass(MenuTableViewCell.self)
UITableViewDataSource代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menusItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MenuTableViewCell.identifier, for: indexPath) as! MenuTableViewCell
let item = menusItems[indexPath.row]
cell.setData(item)
return cell
}
menuItems是我在其他任何事情完成之前创建的结构数组
BaseTableViewCell
open class BaseTableViewCell: UITableViewCell {
class var identifier: String { return String.className(self) }
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setup()
}
open override func awakeFromNib() {
}
open func setup() {
}
open override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
open class func height() -> CGFloat {
return 48
}
open func setData(_ data: Any?) {
if let menuText = data as? String {
self.textLabel?.text = menuText
}
if let menuImage = data as? UIImage {
self.imageView?.image = menuImage
}
}
}
表视图单元代码 - 继承BaseTableViewCell
class MenuTableViewCell: BaseTableViewCell {
//MARK: Properties
@IBOutlet weak var name: UILabel!
@IBOutlet weak var icon: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
override func setData(_ data: Any?) {
if let data = data as? MenuTableViewCellData {
NSLog("menu name - %@", data.text)
self.icon?.image = data.image
self.name?.text = data.text
}
}
}
所有菜单名称都写入调试区域,因此正在执行代码。
我不知道是否有丢失的钩子或其他东西。如果还需要进一步的话,请告诉我。任何帮助表示赞赏。
以下是控制器的委托和数据源
extension LeftViewController : UITableViewDelegate {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return MenuTableViewCell.height()
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let menu = LeftMenu(rawValue: indexPath.row) {
self.changeViewController(menu)
}
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if self.tableView == scrollView {
}
}
}
extension LeftViewController : UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return menusItems.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MenuTableViewCell.identifier, for: indexPath) as! MenuTableViewCell
let item = menusItems[indexPath.row]
cell.setData(item)
return cell
}
}
感谢大家的帮助。我能够让它运作起来。我删除了XIB文件,在视图中创建了布局,然后从那里连接起来(关于如何)here。
答案 0 :(得分:2)
确认您已IBOutlets
name
与icon
中的MenuTableViewCell
相关联。假设你说的是真的,NSLog
中的setData
被调用,你可能没有连接IBOutlets
表视图单元子类。
答案 1 :(得分:0)
您可能有0行高。我在那里看到一个height
方法 - 它叫什么?你有
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
某处?
您是否设置了表格视图' rowHeight
?
答案 2 :(得分:-1)
您可以检查名称和图标是否有适当的约束