2016-10-26 37 views
6

Już czytałem i widziałem kilka filmów na ten temat, ale nie mogę tego uruchomić. Próbuję użyć komórki z xib zamiast storyboardu.Komórka od Xib z Swift 3

To jest mój ViewController (gdzie mam widok tabeli).

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; 

    } 

} 

To mój CellTableView (klasa gdzie mam celi):

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 
    } 

} 

zawsze stosować tabeli Zobacz komórkę wewnątrz Table View w serii ujęć, ale chcę spróbować podejścia XIB teraz.

Dodałem identyfikator do komórki XIB, aby wywołać go za pomocą metody dequeueReusableCell.

Co mogę zrobić źle? Próbowałem Outlet dataSource i delegata widoku tabeli, ale mam błąd (i myślę, że nie jest to właściwe kroki).

Odpowiedz

33

Musisz zarejestrować swój obiekt stalówki.

W viewDidLoad():

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

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

Należy również zwrócić liczbę odcinków:

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

Masz na myśli identyfikator komórki, prawda? Więc w ViewController ja po prostu umieścić: niech nib = UINib (nibName: "komórka", pakiet: nil) tableView.register (stalówka, forCellReuseIdentifier: "komórka") ? To nie działa. Moje komórki są nadal puste. – Adrian

+2

Przepraszam, naprawdę miałem na myśli nazwę twojego pliku nib. Powinien być prawdopodobnie "CellTableView" w twoim przypadku ... – eLwoodianer

+0

Rozumiem. Dziękuję Sam. już działa. – Adrian

2

Przede wszystkim, trzeba zarejestrować stalówka obiektu.

yourTable?.register(UINib(nibName: "yourCustomCell", bundle: nil), forCellReuseIdentifier: "cellIdentifier")