2016-02-21 31 views
1

我的代碼:如何在UITableViewCell中調用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 
    }) 
    } 
} 

我讀過周圍,你不能調用viewDidLoad中的一個UITableViewCell,只有在一個UITableViewController。所有的答案都在Objective-C中,但我正在使用Swift編寫應用程序。我沒有收到任何嚴重錯誤,但是在運行應用程序時,標籤所在的單元格中沒有任何內容出現。我對使用Xcode相當陌生,因爲我只是在遵循指南,所以如果我說不正確的話讓我知道。

+0

是你能解決這個問題? –

回答

1

你不能這樣做的原因是UITableViewCell不是UIViewController的子類。

UITableViewDataSource中的cellForRowAtIndexPath方法是您應該設置單元格的地方。你可能只想做這樣的事情在您的自定義UITableViewCell

class CellOne: UITableViewCell { 
    @IBOutlet weak var new1: UILabel! 
} 
在TableViewController的 cellForRowAtIndexPath方法

然後(前提是你已經導入火力點),你應該出列,可重複使用的電池,將它轉換爲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 
} 
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 
      }) 
     } 
} 
+0

通常'viewDidLoad'只在初始化後調用一次,但當這個單元格出現時會調用'layoutSubviews',這使得它更像'viewDidAppear'。開始觀察可能是可以的,但仍然不是理想的用法。 –

+0

是的,將需要添加一個布爾標誌,使其只執行一次。 –