我的代码:
import Foundation
import Firebase
class CellOneViewController: UITableViewCell {
@IBOutlet weak var new1: UILabel!
let ref = Firebase(url: "https://burning-heat-8250.firebaseio.com/slide2")
func viewdidload() {
ref.observeEventType (.Value, withBlock: { snapshot in
self.new1.text = snapshot.value as? String
})
}
}
我已经读过你不能在UITableViewCell中调用viewDidLoad,只能在UITableViewController中调用。所有答案都在Objective-C中,但我在Swift中编写应用程序。我没有收到任何严重错误,但在运行应用程序时,标签所在的单元格中没有任何内容。我使用Xcode相当新,因为我只是按照指南进行操作,所以如果我说错了,请告诉我。
答案 0 :(得分:1)
你不能这样做的原因是UITableViewCell
不是UIViewController的子类。
UITableViewDataSource中的cellForRowAtIndexPath
方法是您应该设置单元格的位置。您可能只想在自定义UITableViewCell
中执行以下操作:
class CellOne: UITableViewCell {
@IBOutlet weak var new1: UILabel!
}
然后在TableViewController的cellForRowAtIndexPath
方法中(假设您已导入firebase),您应该将可重用单元格出列,将其转换为CellOne(as! cellOne
),然后您可以设置new1.text
值。我不知道你的重用标识符是什么,但它看起来像这样:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Your-Reuse-Identifier", forIndexPath: indexPath) as! CellOne
cell.new1.text = "Your Value"
return cell
}
答案 1 :(得分:0)
我认为,你需要方法func layoutSubviews()。
只有ViewController在加载视图后才会调用func viewDidLoad()。
如果需要初始化某些内容或更新视图,则需要在layoutSubviews()中进行。很快,您的视图或UITableViewCell被加载,layoutSubviews()被调用。
将viewDidLoad替换为layoutSubviews()
class CellOneViewController: UITableViewCell {
@IBOutlet weak var new1: UILabel!
let ref = Firebase(url: "https://burning-heat-8250.firebaseio.com/slide2")
override func layoutSubviews() {
super.layoutSubviews()
ref.observeEventType (.Value, withBlock: { snapshot in
self.new1.text = snapshot.value as? String
})
}
}