#ios #swift #uitableview
#iOS #swift #uitableview
Вопрос:
У меня есть следующее, UIViewController
которое содержит UITableView
:
class Home : UIViewController {
override func loadView() {
self.view = HomeView()
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
с этим представлением:
class HomeView: UIView {
let tableView = UITableView()
let delegate = TVDelegate()
let dataSource = TVDataSource()
override init(frame: CGRect) {
super.init(frame: frame)
createSubviews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
createSubviews()
}
func createSubviews() {
setupTableView()
setupConstraints()
}
func setupTableView() {
tableView.estimatedRowHeight = 500
tableView.tableFooterView = UIView()
tableView.delegate = delegate
tableView.dataSource = dataSource
tableView.backgroundColor = UIColor.purple
tableView.register(TVCell.self, forCellReuseIdentifier: "tableViewCell")
}
func setupConstraints() {
tableView.prepareView()
self.addFullSizeView(item: tableView)
}
}
Это мой делегат:
class TVDelegate : NSObject, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 5
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 500
}
}
и мой источник данных:
class TVDataSource : NSObject, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as? TVCell
{
return cell
}
return UITableViewCell()
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Your Favourites"
}
}
Однако вместо того, чтобы видеть 5 разделов, я вижу только один раздел с одним заголовком при запуске моего приложения.
Ответ №1:
numberOfSections
должен ли быть здесь метод источника данных
class TVDataSource : NSObject, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 5
}
}
Что происходит, так это то, что TableView принимает номер по умолчанию, равный 1, где он не реализован в TVDataSource
классе, поскольку метод является необязательным