Zacznę najpierw od odpowiedzi na twoje pytania.
Czy muszę kodować własną klasę dla każdej komórki? => Tak, uważam, że tak. Przynajmniej zrobiłbym to w ten sposób.
Czy mogę użyć jednego tableviewController? => Tak, możesz. Możesz jednak mieć również widok tabeli w kontrolerze widoku.
Jak mogę wypełnić dane w różnych komórkach? => W zależności od warunków możesz wypełnić dane w różnych komórkach. Na przykład załóżmy, że chcesz, aby pierwsze dwa wiersze przypominały komórki pierwszego typu. Po prostu tworzysz / ponownie używasz pierwszego typu komórek i ustawiasz jego dane. Myślę, że będzie wyraźniej, gdy pokażę ci zrzuty ekranu.
Podam przykład z TableView wewnątrz ViewController. Gdy zrozumiesz główną koncepcję, możesz spróbować zmodyfikować ją tak, jak chcesz.
Krok 1: Utwórz 3 niestandardowe TableViewCells. Nazwałem to, FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Powinieneś używać bardziej znaczących nazw.
Krok 2: Przejdź do Main.storyboard i przeciągnij i upuść TableView do kontrolera widoku. Teraz wybierz widok tabeli i przejdź do inspektora tożsamości. Ustaw "Prototype Cells" na 3. Tutaj właśnie powiedziałeś swojemu TableView, że możesz mieć 3 różne rodzaje komórek.
Krok 3: Teraz wybierz pierwszą komórkę w swoim TableView i inspektorze tożsamości, umieść „FirstCustomTableViewCell” w polu Klasa niestandardowa, a następnie ustaw identyfikator jako „firstCustomCell” w inspektorze atrybutów.
Zrób to samo dla wszystkich innych - ustaw ich klasy niestandardowe odpowiednio jako „SecondCustomTableViewCell” i „ThirdCustomTableViewCell”. Ustaw również identyfikatory kolejno jako secondCustomCell i thirdCustomCell.
Krok 4: Edytuj niestandardowe klasy komórek i dodaj gniazda zgodnie z potrzebami. Zredagowałem go na podstawie twojego pytania.
PS: Musisz umieścić wyloty w definicji klasy.
Tak więc w pliku FirstCustomTableViewCell.swift pod
class FirstCustomTableViewCell: UITableViewCell {
umieściłbyś swoją etykietę i punkty wyświetlania obrazu.
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myLabel: UILabel!
aw SecondCustomTableViewCell.swift dodaj dwie etykiety, takie jak-
import UIKit
class SecondCustomTableViewCell: UITableViewCell {
@IBOutlet weak var myLabel_1: UILabel!
@IBOutlet weak var myLabel_2: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
a ThirdCustomTableViewCell.swift powinien wyglądać następująco:
import UIKit
class ThirdCustomTableViewCell: UITableViewCell {
@IBOutlet weak var dayPicker: UIDatePicker!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Krok 5: W swoim ViewController utwórz Outlet dla swojego TableView i ustaw połączenie z storyboardu. Ponadto należy dodać UITableViewDelegate i UITableViewDataSource w definicji klasy jako listę protokołów. Twoja definicja klasy powinna wyglądać następująco:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
Następnie dołącz UITableViewDelegate i UITableViewDatasource widoku tabeli do kontrolera. W tym momencie twój viewController.swift powinien wyglądać następująco:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
PS: Jeśli chcesz użyć TableViewController zamiast TableView wewnątrz ViewController, możesz pominąć ten krok.
Krok 6: Przeciągnij i upuść widoki obrazów i etykiety w komórce zgodnie z klasą Cell. a następnie zapewnić połączenie z ich gniazdami ze scenorysu.
Krok 7: Teraz zapisz wymagane metody UITableViewDatasource w kontrolerze widoku.
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "firstCustomCell")
//set the data here
return cell
}
else if indexPath.row == 1 {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "secondCustomCell")
//set the data here
return cell
}
else {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "thirdCustomCell")
//set the data here
return cell
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}