FirebaseUi - Swift - 将 UITableViewCell 的值转换为自定义类

Posted

技术标签:

【中文标题】FirebaseUi - Swift - 将 UITableViewCell 的值转换为自定义类【英文标题】:FirebaseUi - Swift - Cast value of UITableViewCell to custom class 【发布时间】:2015-11-16 09:04:53 【问题描述】:

在使用 Firebase-UI 为 UITableViewCell 处理自定义类时遇到问题。这是我的代码:

在我的TableViewController

self.dataSource = FirebaseTableViewDataSource(ref: firebaseRef, cellClass: MyEventTableViewCell.self, cellReuseIdentifier: "MyEventTableViewCell", view: self.tableView)

self.dataSource.populateCellWithBlock  (cell, obj) -> Void in

    let snap = obj as! FDataSnapshot
    print(cell)

    let myEventCell = cell as! MyEventTableViewCell

    myEventCell.eventNameLabel.text = "hello" 

在我的MyEventTableViewCell:

class MyEventTableViewCell: UITableViewCell 

    @IBOutlet weak var eventImageView: UIImageView!
    @IBOutlet weak var eventNameLabel: UILabel!
    var error:String?

    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
     

我明白了:

'致命错误:在展开 Optional 时意外发现 nil 价值”

在这一行:

myEventcell.eventNameLabel.text = "hello"

奇怪的是“print”给出了以下输出:

<test.MyEventTableViewCell: 0x7dab0400; baseClass = UITableViewCell; frame = (0 0; 320 44); autoresize = W; layer = <CALayer: 0x7be738c0">>

我们需要做什么来管理UITableViewCell的子类?

PS:我正在使用情节提要来定义我的自定义单元格,并且我正在使用 Xcode 7。

【问题讨论】:

你能打印一下myEventCell.eventNameLabel吗?由于您确实得到了单元格的打印,我们需要知道 eventNameLabel 是否已填充,因为它是隐式展开的可选选项。 如果我这样做:print(myEventCell) 和 print(myEventCell.eventNameLabel),我得到以下输出:> 和第二次打印:致命错误:在展开可选值时意外发现 nil 这意味着您的eventNameLabel 插座未正确连接到视图上的标签。 我又试了一次,一切正常,但还是不行。你在 Swift 中试过这个吗?你有一个例子吗?发送 【参考方案1】:

FirebaseUI 开发人员在这里:

如果您使用情节提要/原型单元格,请使用具有prototypeReuseIdentifiercellReuseIdentifier 的构造函数(请参阅here)。这是一个不幸的缺陷,由 ios 如何开始使用 UICollectionViews 但让 Storyboard 的 UITableView 实现不同。 TL;DR:Storyboards 会自动为您注册单元重用标识符,如果您尝试再次注册它,它将覆盖它并认为它不同,这意味着您什么也看不到。有关更多信息,请参阅 Using Storyboards and Prototype Cells 上的 FirebaseUI 文档(尽管看起来我需要添加原型位,因此对造成的混淆表示歉意)。

【讨论】:

【参考方案2】:

您似乎忘记在自定义单元格中实现 init

对于 FirebaseUI-ios github

创建 UITableViewCell 或 UICollectionViewCell 的自定义子类,有或没有 XIB 文件。确保实例化 -initWithStyle:reuseIdentifier: 实例化 UITableViewCell 或 -initWithFrame: 实例化 UICollectionViewCell。然后,您可以将自定义类与 FirebaseTableViewDataSource 的实现挂钩。

【讨论】:

您能否具体说明需要添加哪些内容才能完成这项工作?我仍然可以使用故事板中定义的约束吗?谢谢 哦!!,使用情节提要,它应该调用 awakeFromNib (据我所知)。现在没有要测试的mac。在您的故事板中,您是否正确设置了自定义类?您的 IBoulet 是否正确连接到情节提要? 是的,我就是这么想的。是的,我正确设置了自定义类(我检查了 2-3 次)。 IBOutlet 也一样 ;)

以上是关于FirebaseUi - Swift - 将 UITableViewCell 的值转换为自定义类的主要内容,如果未能解决你的问题,请参考以下文章

Firebase UI 身份验证提供程序 iOS Swift 示例

编译 'com.firebaseui:firebase-ui-auth:0.4.0' gradle 构建错误

使用 firebaseui:firebase-ui-firestore 构建发布 APK 时出现问题

将 FirebaseUI-IOS 与自定义 UICollectionViewCell 一起使用时出错

Firebase UI - Auth - 使用自己的布局

FirebaseUI RecycleView 只显示第一项