Позвольте мне сначала ответить на ваши вопросы.
Должен ли я кодировать собственный класс для каждой ячейки? => Да, я так считаю. По крайней мере, я бы так поступил.
Могу ли я использовать один tableviewController? => Да, можно. Однако вы также можете иметь табличное представление внутри вашего View Controller.
Как я могу заполнить данные в разных ячейках? => В зависимости от условий вы можете заполнять данные в разных ячейках. Например, предположим, что вы хотите, чтобы первые две строки были похожи на ячейки первого типа. Итак, вы просто создаете / повторно используете первый тип ячеек и устанавливаете его данные. Думаю, будет более понятно, когда я покажу вам скриншоты.
Позвольте мне привести пример с TableView внутри ViewController. Как только вы поймете основную концепцию, вы можете попробовать изменить ее как хотите.
Шаг 1. Создайте 3 пользовательских ячейки TableViewCell. Я назвал его FirstCustomTableViewCell, SecondCustomTableViewCell, ThirdCustomTableViewCell. Вам следует использовать более значимые имена.
Шаг 2: перейдите на Main.storyboard и перетащите TableView внутри вашего View Controller. Теперь выберите представление таблицы и перейдите к инспектору удостоверений. Установите «Ячейки прототипа» на 3. Здесь вы только что сказали своему TableView, что у вас может быть 3 разных типа ячеек.
Шаг 3. Теперь выберите 1-ю ячейку в TableView и в инспекторе удостоверений, поместите «FirstCustomTableViewCell» в поле «Пользовательский класс», а затем установите идентификатор как «firstCustomCell» в инспекторе атрибутов.
Сделайте то же самое для всех остальных - установите их настраиваемые классы как «SecondCustomTableViewCell» и «ThirdCustomTableViewCell» соответственно. Также последовательно установите идентификаторы secondCustomCell и thirdCustomCell.
Шаг 4: Отредактируйте пользовательские классы ячеек и добавьте розетки в соответствии с вашими потребностями. Я отредактировал его на основании вашего вопроса.
PS: Нужно поставить розетки под определение класса.
Итак, в FirstCustomTableViewCell.swift под
class FirstCustomTableViewCell: UITableViewCell {
вы бы поставили ярлык и выходы для просмотра изображений.
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myLabel: UILabel!
и в SecondCustomTableViewCell.swift добавьте две метки, например:
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)
}
}
и ThirdCustomTableViewCell.swift должен выглядеть так:
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)
}
}
Шаг 5: В ViewController создайте Outlet для TableView и установите соединение из раскадровки. Кроме того, вам необходимо добавить UITableViewDelegate и UITableViewDataSource в определение класса в качестве списка протоколов. Итак, определение вашего класса должно выглядеть так:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
После этого прикрепите UITableViewDelegate и UITableViewDatasource вашего табличного представления к вашему контроллеру. На этом этапе ваш viewController.swift должен выглядеть так:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
PS: Если бы вы использовали TableViewController, а не TableView внутри ViewController, вы могли бы пропустить этот шаг.
Шаг 6: Перетащите изображения и метки в ячейку в соответствии с классом Cell. а затем обеспечить подключение к их розеткам из раскадровки.
Шаг 7. Теперь напишите необходимые методы UITableViewDatasource в контроллере представления.
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()
}
}