2016-10-26 2 views
6

Я уже читал и видел несколько видеоматериалов об этой теме, но я не могу заставить это работать. Im пытается к клетке от xib вместо раскадровки.Ячейка из Xib с Swift 3

Это мой ViewController (где у меня есть вид таблицы).

import UIKit 

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet var tableView: UITableView! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return 5 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! CellTableView 

     cell.test.text = "A"; 

     return cell; 

    } 

} 

Это мой CellTableView (класс, где у меня есть мой сотовый):

import UIKit 

class CellTableView: UITableViewCell { 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 
    } 

    @IBOutlet var teste: UILabel! 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

} 

Я всегда использовал Table View Cell внутри Table View на раскадровке, но я хочу попробовать XIB подход Теперь.

Я добавил ячейку Идентификатор на ячейке XIB, чтобы вызвать его с помощью метода dequeueReusableCell.

Что я могу делать неправильно? Я попытался вывести dataSource и делегат в представлении таблицы, но у меня есть ошибка (и я думаю, что это не правильные шаги).

ответ

33

Вам необходимо зарегистрировать объект nib.

В viewDidLoad():

let nib = UINib(nibName: "nameOfYourNibFile", bundle: nil) 

tableView.register(nib, forCellReuseIdentifier: "yourIdentifier") 

Кроме того, необходимо вернуть количество секций:

func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 
+0

Вы имеете в виду идентификатор ячейки, не так ли? Так в ViewController я просто поставить: пусть острия = UINib (nibName: "клетка", узелок: ноль) tableView.register (СИБ, forCellReuseIdentifier: "клетка") ? Это не сработало. Мои ячейки все еще пусты. – Adrian

+2

Извините, я на самом деле имел в виду имя вашего файла nib. Должно быть, вероятно, «CellTableView» в вашем случае ... – eLwoodianer

+0

Я вижу. Спасибо, Сэм. теперь работает. – Adrian

2

Прежде всего, Вы должны зарегистрировать свое острие объекта.

yourTable?.register(UINib(nibName: "yourCustomCell", bundle: nil), forCellReuseIdentifier: "cellIdentifier") 
Смежные вопросы