gpt4 book ai didi

ios - Swift/如何填充 UITableViewCells

转载 作者:可可西里 更新时间:2023-11-01 02:13:34 25 4
gpt4 key购买 nike

我有一个带有 TableView 的 Controller 。在 View 中定义了我的单元格,然后将其绑定(bind)到 TableView 。 (请原谅术语)。应用程序构建并运行良好,但单元格中定义的标签均未显示任何内容。除了单元格分隔符外,整个表格都是空白的。我遵循了许多教程并广泛搜索了原因,如何创建(Create a Table View - Apple docs),要检查的设置,所有结果都相同。我也试过清理、重启 Xcode 等。这是 Xcode 8/Swift 3。

View Controller 有一个 TableView ,我在 viewDidLoad 中像这样注册单元类

self.tableView.registerCellClass(MenuTableViewCell.self) 

UITableViewData源代码

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
}
}
}

Table View Cell 代码——继承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
}
}
}

所有菜单名称都写入调试区域,因此代码正在执行。

我不知道是否缺少钩子(Hook)或其他东西。如果还需要任何进一步的信息,请告诉我。感谢您的帮助。

显示 IBOutlets 已连接的屏幕截图 name

icon

这是来自 Controller 的委托(delegate)和数据源

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 文件,在 View 中创建了布局,然后从那里将其连接起来(按照 here 了解如何操作)。

最佳答案

验证您是否已为 MenuTableViewCell 中的 nameicon 连接了 IBOutlets。假设你说的是真的,setData 中的 NSLog 被调用,很可能你还没有连接 TableView 单元格的 IBOutlets子类。

关于ios - Swift/如何填充 UITableViewCells,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com