如何在UITableViewCell中调用viewDidLoad?

时间:2016-02-21 09:07:25

标签: ios objective-c xcode swift viewdidload

我的代码:

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相当新,因为我只是按照指南进行操作,所以如果我说错了,请告诉我。

2 个答案:

答案 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
           })
       }
 }