2017-02-22 7 views
0

// пользовательские ячейки в одном быстром файле
IBoutlet - это нуль в моей пользовательской ячейке таблицы?

import UIKit 

class CardTableViewCell: UITableViewCell { 

    @IBOutlet weak var elapsedTime: UILabel! 
    @IBOutlet weak var todo: UILabel! 
    @IBOutlet weak var startAndStop: UIView! 
    @IBOutlet weak var progress: UIView! 
    @IBOutlet weak var cardView: UIView! 

} 

// пользовательские таблицы контроллера вида в другом быстром файл

import UIKit 

class CardFeedTableViewController: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell") 
     tableView.delegate = self 
     tableView.dataSource = self 
    } 

    // MARK: - Table view data source 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return 3 
    } 


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell: CardTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "cardCell", for: indexPath) as! CardTableViewCell 
     cell.todo.text = "study" 
     return cell 
    } 

running the app triggers a error

storyboard

Я не знаю, почему все свойства в моей ячейке таблицы равны нулю, когда я запускаю приложение.

+0

Если вы не использовали XIB, вы должны удалить регистр строки из поля зрения сделали нагрузки, в противном случае, вы должны использовать регистр клетки пера для идентификатора tableView.register (UINib ... ", forCellReuseIdentifier: CardTableViewCell.self) –

+0

em ~, можете ли вы дать мне более подробную информацию? Я все еще не понимаю, почему это должно быть так? T_T – cary

ответ

2

Есть два варианта для регистрации, но и принимать параметр, называемый forCellReuseIdentifier, который является строкой, которая позволяет зарегистрировать различных видов клеток просмотреть таблицы. Например, вы можете иметь повторное идентификатор «DefaultCell», еще один называется «Heading клетка», еще один «CellWithTextField», и так далее. Повторное использование разных ячеек таким образом помогает экономить системные ресурсы.

Если вы хотите использовать регистр() с Swift класса, вы обеспечиваете таблицы вид клеток класса в качестве первого параметра. Это полезно, если ваша ячейка полностью определена кодом. В качестве примера, это использует класс по умолчанию UITableViewCell:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell") 

Вы можете затем Dequeue, что клетки, как это:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultCell")! 
    return cell 
} 

Другой вариант заключается в использовании регистра () с Интерфейс Builder nib файл. Nibs содержат имя класса для использования вместе с их дизайном, поэтому этот метод чаще встречается. Вот пример

tableView.register(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellFromNib") 

Но если вы используете раскадровки вы найдете его проще создать прототип клетки и дать им идентификатор повторного использования непосредственно в Interface Builder. Так что не нужно регистрировать программно.

Удалить эту строку формы viewDidLoad

tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell). 
+0

Я забыл подключить выходы tableView T_T – cary

+0

удалить tableView.resister работает, но почему? – cary

+0

Отметьте ответ правильно, потому что это не требуется, если вы используете раскадровку. –

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