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),我得到以下输出:eventNameLabel
插座未正确连接到视图上的标签。
我又试了一次,一切正常,但还是不行。你在 Swift 中试过这个吗?你有一个例子吗?发送
【参考方案1】:
FirebaseUI 开发人员在这里:
如果您使用情节提要/原型单元格,请使用具有prototypeReuseIdentifier
与cellReuseIdentifier
的构造函数(请参阅here)。这是一个不幸的缺陷,由 ios 如何开始使用 UICollectionView
s 但让 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 时出现问题