2016-02-21 2 views
1

Мой код:Как я могу вызвать viewDidLoad в UITableViewCell?

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.

Метод cellForRowAtIndexPath в UITableViewDataSource - это то, где вы должны настроить свои ячейки. Вы, вероятно, только хотите сделать что-то подобное в пользовательских UITableViewCell:

class CellOne: UITableViewCell { 
    @IBOutlet weak var new1: UILabel! 
} 

Тогда в вашем cellForRowAtIndexPath метода TableViewController (при условии вы импортировали 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 
} 
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

Да, нужно добавить флаг bool, чтобы он выполнялся только один раз. –

Смежные вопросы